PDA

View Full Version : error در insert



sepehr_sepehr
جمعه 20 شهریور 1388, 11:09 صبح
مشکل این کد چیه؟وقتی اجراش میکنم در متد executenoncuery(); این خطا رو میده:

incorrect syntax near '='




private void toolStripButton3_Click(object sender, EventArgs e)
{

textboxlocation.Clear();

foreach (Control ctrl in panel1.Controls)
{

textboxlocation.Add(ctrl.Location);

}
string insertstr = "insert into "+tbl_name+"(";
foreach (string column in fieldtable)
{
insertstr += string.Format("{0},", column);
}
insertstr =insertstr.Substring(0, insertstr.Length - 1);
insertstr += ")values(";
foreach (Point value in textboxlocation)
{
insertstr += string.Format("{0},",Convert.ToString(value));
}
insertstr = insertstr.Substring(0, insertstr.Length - 1) + ")";

SqlCommand objcommand = new SqlCommand();
objcommand.Connection = connection;
objcommand.CommandText = insertstr;
connection.Open();
objcommand.ExecuteNonQuery();
connection.Close();




fieldtable یک لیست که اسم فیلدهای جدول در اون نگهداری میشه.
textbox location یک لیست که موقعیت textbox های موجود در فرم در اون نگهداری میشه.

Reza_Yarahmadi
جمعه 20 شهریور 1388, 15:34 عصر
دوست عزیز خاصیت Location برای هر کنترل در حالت رشته ای بصورت {X=432,Y=142} است. ولی شما توی دستورتون بصورت عدد باهاش برخورد کردید. برای حلش یا باید اعداد رو استخراج کنید و اونها رو ذخیره کنید و یا نوع داده فیلدها در بانک رو به nvarchar تغییر بدید و توی دستور SQL قبل و بعد هر مقدار (value) از تک کتیشن ( ' ) استفاده کنید.

sepehr_sepehr
شنبه 21 شهریور 1388, 00:37 صبح
من که از convert.tostring(value) استفاده کردم تا به string تبدیل بشه و بعد ذخیره بشه!این اشتباه؟؟؟پس چه جوری شما میگید به شکل عدد باهاش برخورد میکنه؟؟؟
در واقع میخوام موقعیت textbox ها ذخیره بشن تا بتونم دوباره از اون استفاده کنم.
به نظر شما اگه به صورت string ذخیره بشه میشه دوباره برای تعیین موقعیت textbox ازش استفاده کرد؟؟
یعنی مثلا میشه نوشت textbox1.location=locationstring

mn_zandy63
شنبه 21 شهریور 1388, 06:51 صبح
برای تبدیل به string ایرادی نداره کدی که نوشتی. ایراد اینجاست که دستور SQL شما چیزی مثل این میشه:
insert into tableName(column1, column2, ...)values({X=432,Y=142},{X=432,Y=142},...)
در حالی که باید به این شکل باشه:
insert into tableName(column1, column2, ...)values("{X=432,Y=142}","{X=432,Y=142}",...)
به " ها در دو طرف مختصات نقاط دقت کن.

نکته دیگه اینکه به هر حال با این روش تبدیل نمیتونی به راحتی بعدا از string به point تبدیل کنی.
بهتره از کلاس PointConverter استفاده کنی.
با متد ConvertToString به string تبدیل کن و بعدا رشته رو با متد ConvertFromString به point تبدیل کن.
موفق باشی

sepehr_sepehr
شنبه 21 شهریور 1388, 09:47 صبح
ممنون.باید مثلا اینجوری بنویسم:



TextBox txt = new TextBox();
txt.Size = new Size(100, 100);
System.ComponentModel.TypeConverter converter =
System.ComponentModel.TypeDescriptor.GetConverter( typeof(Point));
string loc =converter.ConvertToString(button1.Location);
Point point1 = (Point)converter.ConvertFromString(loc);

mn_zandy63
شنبه 21 شهریور 1388, 23:54 عصر
آره همینطوره.
البته به جای TypeConverter میتونستی مستقیما از PointConverter استفاده کنی.
public class PointConverter : TypeConverter

var point = new Point(100, 200);
var converter = new PointConverter();
var convertedPoint = converter.ConvertToString(point);
var reConvertedPoint = converter.ConvertFromString(convertedPoint);
موفق باشی.