PDA

View Full Version : سوال: مشکل ساخت sql command به صورت رشته ای



unknownboe
دوشنبه 21 مرداد 1392, 14:28 عصر
با سلام سوالی داشتم و از استادان محترم خواهش میکنم در صورت امکان راهنمایی کنند من تابعی دارم که 8 پارامتر به صورتی string دریافت کرده و رشته ای را با آن می سازد



public Insert(string TableName,string IDValue,string KeyValue,string UserID,string Action, string Date,string Time,string IpAddress)
{
string ss = "INSERT INTO tablename (TableName,IDValue,KeyValue,UserID,Action,Date,Tim e,IpAddress) VALUES ('" + TableName + "','" + IDValue + "','" + KeyValue + "','" + UserID + "','" + Action + "','" + Date + "','" + Time + "','" + IpAddress + "')";
}



مشکل اینجاست که اگر مقدار یکی از پارامتر ها فارسی باشد با پارامتر های دیگر جا به جا می شود مثلا
اگر مقدار پارامتر keyvalue "مقدار تست " باشد مقدارش با پارامتر IpAddress عوض می شود ور در نتیجه دستور insert به هم میریزد

mehran6764
دوشنبه 21 مرداد 1392, 14:36 عصر
سلام
اول اینو بگم اگه کدهاتونو داخل تگ کد بزارید ، خواناتر دیده میشه ، زودتر به جواب اتون می رسین ، دوم به این شکل استفاده کنید ببینید مشکل اتون حل میشه (( راحت تر خطایابی میشه )





SqlConnection objonnection = new SqlConnection(pblicvarible.strcon);
objonnection.Open();
SqlCommand objcommand = new SqlCommand();
objcommand.Connection = objonnection;
objcommand.CommandText = "INSERT INTO logtb (ide,Username, pass)" + "VALUES(@ide,@Username, @pass)";
objcommand.Parameters.AddWithValue("@ide", count);
objcommand.Parameters.AddWithValue("@Username", textBox1.Text);
objcommand.Parameters.AddWithValue("@pass", textBox2.Text);


objcommand.ExecuteNonQuery();
objonnection.Close();

amir200h
دوشنبه 21 مرداد 1392, 14:37 عصر
این N چیه گذاشتی؟ این اضافه ست
N را زمانی میزاریم که میخوایم از بانک مقدار فارسی واکشی کنیم. برای شما که فقط میخواین insert کنین این N اضافه س و نباید باشه.
در ضمن. بهتره ارسال از نوع رشته رو بزارین کنار. یک نگاه به پست بالا که دوستمون گذاشتن بندازین. به این نوع کد نویسی میگن ارسال با پارامتر. برید این روش رو یاد بگیرین

unknownboe
دوشنبه 21 مرداد 1392, 14:39 عصر
سلام و ممنون از پاسخ اما ساختار برنامه طوریست که باید من این رشته رو حتما بسازم و با اون رشته insert کنم .در مورد تگ هم چشم

unknownboe
دوشنبه 21 مرداد 1392, 14:40 عصر
درسته برداشتم

unknownboe
دوشنبه 21 مرداد 1392, 14:45 عصر
سلام . ممنون از راهنمایی چشم این روش رو هم یاد میگیرم اما من پروژه رو با کسلاسی نوشتم که باید command رو به صورت رشته ای ارسال کنم تا اجرا بشه .اگر ممکن در این مورد منو راهنمایی کنید .البته این مورد فکر کنم ربطبی به command نداره این مشکل وقتی میخوایم که رشته ای رو بسازیم کی یکی از پارامتر ها فارسی میاد

amir200h
دوشنبه 21 مرداد 1392, 14:55 عصر
خوب دوست من تو کلاسی که اینو بصورت رشته فرستادی توی پارامترهاش بجای string میتونی sqlcommand بزاری و بصورت پارامتر ارسال کنی. کدت هم حرفه ای تر میشه هم امنیتش بالا میره
در مورد سوالت هم کدتو اینجوری نویس
string sql = "insert into home (TableName,IDValue,KeyValue,UserID,Action,Date,Tim e,IpAddress) ";
sql += "values('{0}' , '{1}' , '{2}' , {3}, '{4}' , {5} , '{6}' )";
sql = string.Format(sql,TableName,IDValue ,KeyValue,UserID,Action,Date,Time,IpAddress);

اگه فیلدی که داری ارسال میکنی از نوع رشته ای نیست تک کتیشن های عدد پارامتر رو وردار

unknownboe
دوشنبه 21 مرداد 1392, 15:00 عصر
ممنون ار راهنماییتون مشکل حل شد

unknownboe
دوشنبه 21 مرداد 1392, 15:00 عصر
ممنون از شما مشکل با روشی که شما گفتین حل شد

veniz2008
دوشنبه 21 مرداد 1392, 16:41 عصر
N را زمانی میزاریم که میخوایم از بانک مقدار فارسی واکشی کنیم. برای شما که فقط میخواین insert کنین این N اضافه س و نباید باشه.
سلام.
در کدنویسی معمولی که با ثبت داده های فارسی، داده ها ممکنه بصورت علامت سوال درج بشن از این N استفاده میکنن.
بنابراین وجود این N در Insert و Update هم میتونه کاربرد داشته باشه و اینطور نیست که فقط در واکشی (select) کاربرد داشته باشه.
موفق باشید.