PDA

View Full Version : update کردن و قرار گرفتن کاراکتر علامت سوال بجای حروف فارسی



farnoosh66
یک شنبه 30 شهریور 1393, 15:34 عصر
با سلام
1)دوستان، زمانی که یه سری مقادیر textbox توی دیتابیس update میکنم، بجای حروف فارسی توی دیتابیس علامت سوال قرار میده!همین کد تو یه بخش دیگه بدون مشکل داره کار میکنه.کسی میدونه مشکل از کجاس؟؟
2)سوال دوم اینکه کامپوننتی برای قفل گذاشتن روی برنامه سراغ دارین؟؟قبلا کامپوننت tblocker شنیده بودم!!کسی هست ازش استفاده کرده باشه یا چیزی شبیهش سراغ داشته باشه؟؟؟

mreram
یک شنبه 30 شهریور 1393, 15:50 عصر
سلام لطفا کدتون رو بذارید

farnoosh66
یک شنبه 30 شهریور 1393, 16:54 عصر
SqlConnection strcon = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\mark_sof twares\\mark\\DB.mdf;Integrated Security=True;User Instance=True");
SqlCommand com = new SqlCommand();
com.CommandText = "Update TblStd Set id='" + txtid2.Text + "',Fname='" + txtFname2.Text.Trim() + "',Lname='" + txtLname2.Text + "',namP='" + txtnamp2.Text + "',melli_code='" + txtCode_melli2.Text + "',shsh='" + txtshsh2.Text + "',mahal_sodor='" + txtMahal_sodor2.Text + "',birsday='" + date3.Text + "',sex='" + cmbsex.Text + "',ostan='" + cmbostan.Text + "',city='" + cmbcity.Text + "',mghta='" + cmbmaghta.Text + "',paye='" + cmbpaye.Text + "',class='" + cmbclass.Text + "',tel1='" + txttel1.Text + "'Where id=" + txtid2.Text.Trim() + ""; //com.CommandText = "insert into tblsoal (xdars,sharh,G1,G2,G3,G4,mz_doshvari,tarahN,TarahY ,Manba,ZaribT,ZaribD,ZaribH,Ravayi,Payayi) ";
// com.CommandText += "values (@xdars,@sharh,@G1,@G2,@G3,@G4,@mz_doshvari,@tarah N,@TarahY,@Manba,@ZaribT,@ZaribD,@ZaribH,@Ravayi,@ Payayi)";

com.Connection = strcon;
strcon.Open();
com.ExecuteNonQuery();
strcon.Close();
if (FMessegeBox.FarsiMessegeBox.Show("ویرایش با موفقیت انجام شد", "کاربر گرامی", FMessegeBox.FMessegeBoxButtons.Ok) == DialogResult.OK)

veniz2008
یک شنبه 30 شهریور 1393, 17:32 عصر
با سلام
1)دوستان، زمانی که یه سری مقادیر textbox توی دیتابیس update میکنم، بجای حروف فارسی توی دیتابیس علامت سوال قرار میده!همین کد تو یه بخش دیگه بدون مشکل داره کار میکنه.کسی میدونه مشکل از کجاس؟؟





SqlConnection strcon = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\mark_sof twares\\mark\\DB.mdf;Integrated Security=True;User Instance=True");
SqlCommand com = new SqlCommand();
com.CommandText = "Update TblStd Set id='" + txtid2.Text + "',Fname='" + txtFname2.Text.Trim() + "',Lname='" + txtLname2.Text + "',namP='" + txtnamp2.Text + "',melli_code='" + txtCode_melli2.Text + "',shsh='" + txtshsh2.Text + "',mahal_sodor='" + txtMahal_sodor2.Text + "',birsday='" + date3.Text + "',sex='" + cmbsex.Text + "',ostan='" + cmbostan.Text + "',city='" + cmbcity.Text + "',mghta='" + cmbmaghta.Text + "',paye='" + cmbpaye.Text + "',class='" + cmbclass.Text + "',tel1='" + txttel1.Text + "'Where id=" + txtid2.Text.Trim() + ""; //com.CommandText = "insert into tblsoal (xdars,sharh,G1,G2,G3,G4,mz_doshvari,tarahN,TarahY ,Manba,ZaribT,ZaribD,ZaribH,Ravayi,Payayi) ";
// com.CommandText += "values (@xdars,@sharh,@G1,@G2,@G3,@G4,@mz_doshvari,@tarah N,@TarahY,@Manba,@ZaribT,@ZaribD,@ZaribH,@Ravayi,@ Payayi)";

com.Connection = strcon;
strcon.Open();
com.ExecuteNonQuery();
strcon.Close();
if (FMessegeBox.FarsiMessegeBox.Show("ویرایش با موفقیت انجام شد", "کاربر گرامی", FMessegeBox.FMessegeBoxButtons.Ok) == DialogResult.OK)



سلام.
دو مورد رو باید رعایت کنید :
1. نوع فیلدهای جدول رو برای حروف فارسی nvarchar در نظر بگیرید.
2. از یک N قبل از ورودی های فارسی استفاده کنید. مثلا اگر txtFname2 قراره حروف فارسی داخلش درج بشه از کد زیر واسش استفاده کنید :

... Fname=N'" + txtFname2.Text.Trim() ...
برای تمامی ورودی های فارسی یک N (به همین شکل باید بزرگ باشه) قرار بدید.
نکته آخر اینکه این سبک کوئری نوشتن سال هاست که منسوخ شده (ایراد امنیتی داره) و بهترین راه حل استفاده از پارامترها هست.
موفق باشید.

mohammad5530
یک شنبه 30 شهریور 1393, 22:05 عصر
مشکل از نوع فیلد دیتابیستون هست که به احتمال زیاد الان nchar هست و باید اون رو به nvarchar تغییر بدید

یا علی

omid nasri
یک شنبه 30 شهریور 1393, 23:04 عصر
برای قفل میتونی از برنامه Armadilo استفاده کنی خیلی خیلی خیلی خوبه. البته اگه خودت نمیخوای کار کنی رو قفل پروژه، و اماده میخوای.

javady_joon
سه شنبه 15 مهر 1393, 00:16 صبح
سلام.
دو مورد رو باید رعایت کنید :
1. نوع فیلدهای جدول رو برای حروف فارسی nvarchar در نظر بگیرید.
2. از یک N قبل از ورودی های فارسی استفاده کنید. مثلا اگر txtFname2 قراره حروف فارسی داخلش درج بشه از کد زیر واسش استفاده کنید :

... Fname=N'" + txtFname2.Text.Trim() ...
برای تمامی ورودی های فارسی یک N (به همین شکل باید بزرگ باشه) قرار بدید.
نکته آخر اینکه این سبک کوئری نوشتن سال هاست که منسوخ شده (ایراد امنیتی داره) و بهترین راه حل استفاده از پارامترها هست.
موفق باشید.

میشه روش پارامتر رو بهتر توضیح بدین؟

javady_joon
سه شنبه 15 مهر 1393, 00:18 صبح
مشکل از نوع فیلد دیتابیستون هست که به احتمال زیاد الان nchar هست و باید اون رو به nvarchar تغییر بدید

یا علی

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

veniz2008
سه شنبه 15 مهر 1393, 02:14 صبح
میشه روش پارامتر رو بهتر توضیح بدین؟
یه نمونه برای آپدیت کردن یک جدول :

SqlCommand cmd = new SqlCommand("Update Course Set CourseName = @coursename, TeacherName = @teachername Where CourseID = @courseid", con);
cmd.Parameters.AddWithValue("@courseid", TxtCourseID.Text);
cmd.Parameters.AddWithValue("@coursename", TxtCourseName.Text.Trim());
cmd.Parameters.AddWithValue("@teachername", TxtTeacherName.Text.Trim());
con.Open();
cmd.ExecuteNonQuery();
con.Close();

من هم همین مشکل رو دارم فیلدها از نوع nvarchar هست ولی باز علامت سواله
احتمالا از اول نوع فیلدتون nvarchar نبوده و مقادیری رو درج کردید که بصورت علامت سوال درج شده و حالا که به nvarchar تبدیل کردید انتظار داشتید که اون کاراکترها هم درست نشون داده بشن ولی تغییر نوع به nvarchar روی مقادیر قبلی که درج شدن بی تاثیر هست و فقط مقادیر جدیدی رو که درج می کنید به درستی ذخیره میکنه.
موفق باشید.