PDA

View Full Version : سوال: خطا در هنگام اجرای یک Stored Procedure



reuonis
یک شنبه 26 دی 1389, 14:19 عصر
سلام
من یک Stored Procedure برای اضافه کردن کاربران به سایت ایجاد کرده ام ، من این پروسیجر رو در برنامه تست کردم مشکلی نداشت.
اما وقتی می خواستم تعدادی کاربر رو از فایل اکسل بخونم و این Stored Procedure رو اجرا کنم خطای زیر رو به من میده

Implicit conversion from data type nchar to binary is not allowed. Use the CONVERT function to run this query.

من تمام پارامترهام رو با همون فرمتی که توی دیتابیس بود به پروسیجر می فرستم.
این هم تابع اضافه کردن کاربر :


protected void addPerson(string PID, string pass, string fname, string lname, char sex, DateTime date)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["ConnectionString"].ConnectionString);
con.Open();
SqlCommand cmd = con.CreateCommand();

cmd.CommandText = "EXECUTE AddPerson @result,@PID,@FName,@LName,@Sex,@roll,@Pass,@BID,@ MDate";

cmd.Parameters.Add("@result", SqlDbType.Int);
cmd.Parameters["@result"].Direction = ParameterDirection.Output;
SqlParameter puser = new SqlParameter("@PID", SqlDbType.NVarChar, 10);

puser.Value = PID;
cmd.Parameters.Add(puser);


SqlParameter ppass = new SqlParameter("@pass", SqlDbType.Binary, 16);
ppass.Value = computeMD5Hash(pass);
cmd.Parameters.Add(ppass);

DateTime t = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
cmd.Parameters.Add("@MDate", SqlDbType.DateTime).Value = date;


cmd.Parameters.Add("@roll", SqlDbType.Int).Value = 4;
cmd.Parameters.Add("@BID", SqlDbType.NChar,3).Value = Session["BID"].ToString();


cmd.Parameters.Add("@fname", SqlDbType.NVarChar,15).Value = fname;
cmd.Parameters.Add("@lname", SqlDbType.NVarChar, 15).Value = lname;
//cmd.Parameters.AddWithValue("@email", tb_mail.Text);
cmd.Parameters.Add("@sex", SqlDbType.NChar, 1).Value = sex;


cmd.ExecuteNonQuery();


con.Close();

}

reuonis
چهارشنبه 29 دی 1389, 11:51 صبح
من این تابع رو بدون پروسیجر یعنی با دستور مستقیم Insert می کنم مشکلی نداره و کاملا درست کار می کنه اما وقتی با پروسیجر انجامش می دم کار نمی کنه
پروسیجر هم همونطور که گفتم به صورت تکی کارش رو درست انجام میده .
یک حلقه اطلاعات رو می خونه و به این تابع می ده تا توی بانک درجش کنه