PDA

View Full Version : این مشکل از چیه ؟؟؟



مهدی رحیم زاده
یک شنبه 09 اردیبهشت 1386, 08:05 صبح
من از این کدها استفاده کدم اما اشکال می گیره چرا ؟؟؟؟؟

setdata("INSERT INTO Insert_kala_code(code,name,unit)VALUSE(" + System.Convert.ToInt32(textBox1.Text) +
",'" + textBox2.Text + "','" + textBox3.Text + "')");
کد دوم :

setdata("UPDATE Insert_kala_code SET(code=" + System.Convert.ToInt32(textBox1.Text) + ",name='" + textBox2.Text + "',unit='" + textBox3.Text + "')");
سوم :

private void setdata(string command)//this function set and update data with SQL command
{
OleDbDataAdapter da = new OleDbDataAdapter(command, connect);
DataTable dt = new DataTable();
da.Fill(dt);
da.Update(dt);
}
اینم اشکالهایی که میگیره :
Syntax error in INSERT INTO statement.
و
Syntax error in UPDATE statement.
در ضمن اینو هم بگم که من تو این tableیک فیلد دیگه از نوع اوتونامبر دارم و من دقیقا از یک کدی شبیه این تو یه فرم دیگه استفاده کدم و درست کار می کنه ...

مهدی رحیم زاده
یک شنبه 09 اردیبهشت 1386, 09:16 صبح
دوستای عزیز من ...
من هر کاری که می کنم درست نمیشه ....
روی همه دستورات Delete،Update،insert اشکالی میگیره و همه رو هم روی این خط :

da.Fill(dt);
از setdata که کدش رو بالا گزاشتم ، اشکال میگیره ...
تو رو خدا زود راهنمایی کنید که خیلی لازمش دارم ...

moradidn
یک شنبه 09 اردیبهشت 1386, 09:31 صبح
1- چرا از DataAdapter استفاده میکنید.
2- مطمئنی مشکل از Valuse تو Insert و پرانتز بعد از set تو Update نیست؟
Valuse ---->Values

habedijoo
یک شنبه 09 اردیبهشت 1386, 09:36 صبح
دوست عزیز شما یک دستور SQL ی را می خواهید اجرا کنید . شما باید از آبجکت Command استفاده کنید .
وقتی دستور SQL را به آبجکت SQLCommand دادید متد ExecuteRunQuery را اجرا کن .
اینجا رو ببین .
http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson03.aspx

Sorenaa_s
یک شنبه 09 اردیبهشت 1386, 14:55 عصر
باید از ‍ CommandBuilder استفاده کنید تا InsertCommand و UpdateCommand ساخته بشه. یا اینکه خودتون InsertCommand و UpdateCommand رو بسازید و ست کنید به DataAdapter

http://www.codeproject.com/aspnet/adodotnet.asp

مهدی رحیم زاده
یک شنبه 09 اردیبهشت 1386, 16:12 عصر
ولی با وجو همه اینا درست نشد ...
و من اینو لازمش دارم که بتونم راحت Update،insertوdelete کنم ....
اگر میشه بگید که چکار کنم درست بشه یا چکار کنم ....
من با ارتباط با بانک مشکلی ندارم ....
اگر میشه یه نمونه برنامه بزارید و نحوه درست انجام Update،insertوdelete رو برام بزارید ...
خیلی ممنون میشم اگر این کارو بکنید ....

hdv212
یک شنبه 09 اردیبهشت 1386, 17:22 عصر
iranmsb عزیز، در متن Command ای که در قسمت Insert نوشتی، کلمه ی VALUSE رو اشتباه نوشتی که باید به صورت values بنویسی.(لطفا دقت کنید)

مهدی رحیم زاده
یک شنبه 09 اردیبهشت 1386, 17:43 عصر
من اونا رو هم درست کردم اما بازم همون اشکال رو میگیره ؟؟؟

Sorenaa_s
یک شنبه 09 اردیبهشت 1386, 18:19 عصر
این تست شده است، کار می کنه.




private void setdata( string command )
{
OleDbDataAdapter da = new OleDbDataAdapter(command, connect);
OleDbCommandBuilder cb = new OleDbCommandBuilder( da );
da.InsertCommand = cb.GetInsertCommand();
da.UpdateCommand = cb.GetUpdateCommand();
da.DeleteCommand = cb.GetDeleteCommand();
DataTable dt = new DataTable();
da.Fill(dt);
da.Update(dt);
}

Sorenaa_s
یک شنبه 09 اردیبهشت 1386, 18:21 عصر
اینو یادم رفت بگم، تو Select که زده می شه حتما باید فیلد Primary Key وجود داشته باشه وگر نه error میده.

مهدی رحیم زاده
یک شنبه 09 اردیبهشت 1386, 22:13 عصر
دوست عزیز میشه بگی که من چطوری باید با این کد Delete،Update،insert رو انجام بدم
مثلا برای insert کردن باید چکار کنم ، باید دستور insert رو بفرستم یا نه ....

مهدی رحیم زاده
دوشنبه 10 اردیبهشت 1386, 15:25 عصر
یعنی یکی پیدا نمیشه که بگه من باید چکار کنم ...
خیلی لازمش دارم ....

Sorenaa_s
دوشنبه 10 اردیبهشت 1386, 18:00 عصر
چرا از روشهای دیگه برای Insert و Update استفاده نمی کنی؟

PC2st
دوشنبه 10 اردیبهشت 1386, 19:06 عصر
این تست شده است، کار می کنه.





private void setdata( string command )
{
OleDbDataAdapter da = new OleDbDataAdapter(command, connect);
OleDbCommandBuilder cb = new OleDbCommandBuilder( da );
da.InsertCommand = cb.GetInsertCommand();
da.UpdateCommand = cb.GetUpdateCommand();
da.DeleteCommand = cb.GetDeleteCommand();
DataTable dt = new DataTable();
da.Fill(dt);
da.Update(dt);
}



دوست عزیز میشه بگی که من چطوری باید با این کد Delete،Update،insert رو انجام بدم
مثلا برای insert کردن باید چکار کنم ، باید دستور insert رو بفرستم یا نه ....

دیگه نمیخواد دستور insert بفرستی، همون update کار خودش رو میکنه چون با CommandBuilder دستور insert نوشته شده.

مهدی رحیم زاده
دوشنبه 10 اردیبهشت 1386, 22:44 عصر
میشه بگید که من دقیقا باید مثلا برای insert کردن باید چه دستوری رو به setdata ارسال کنم ....

PC2st
سه شنبه 11 اردیبهشت 1386, 01:30 صبح
با فرض اینکه شما یک شئ از OleDbConnection بنام connection و یک شئ از OleDbDataAdapter با نام adapter و یک شئ از DataSet با نام dataSET ایجاد کرده باشید، آنگاه مراحل کار به شکل زیر است:

1. ابتدا باید خاصیت ConnectionString از شی connection را مقدار دهی کنید (همون مشخص کردن Provider و آدرس بانک اطلاعاتی و ...)

2. باید خاصیت SelectCommand از شئ adapter را به شکل زیر تنظیم کنید:


adapter.SelectCommand = new OleDbCommand( "SELECT * FROM database_tableNAME", connection );

که databaseNAME نام جدول بانک اطلاعاتی است.
برای مثال، برای بانک اطلاعاتی شما، چیزی شبیه به زیر میشود:


adapter.SelectCommand = new OleDbCommand( "SELECT * FROM Insert_kala_code", connection );


3. حال نوبت به پر کردن dataSET است، از متد Fill استفاده میکنیم:


adapter.Fill( dataSET, "tableNAME" );

tableNAME نام جدولی در dataSET است که توسط متد Fill ایجاد شده و پر میگردد (نحوه پر کردن dataSET بر اساس خروجی دستور SELECT ائی است که در مرحله 2 مشخص کردیم)

4. حال dataSET را به dataGridView1 متصل میکنیم:


dataGridView1.DataSource = dataSET;
dataGridView1.DataMember = "tableNAME";

tableNAME همان نامی است که در مرحله قبل، مشخص کردیم.
خوب، در مراحل فوق، داده های بانک اطلاعاتی مورد نظر، در شئ dataGridView1 نمایش داده میشوند. اما حال باید یک رکورد را به بانک اطلاعاتی اضافه کنیم، برای این منظور دو راه موجود است، 1) خودمون واسش یک دستور INSERT بنویسیم، 2) توسط کلاس OleDbCommandBuilder یک دستور INSERT بوجود بیاد. بهر حال، ما روش اول را انجام میدهیم:

5. فیلدهای گرفته شده از کاربر را به کمک متد Add بصورت یک رکورد در شئ dataSET قرار میدهیم، بصورت زیر:


dataSET.Tables[ "tableNAME" ].Rows.Add( new object[2] { 12, "Hello" } );

tableNAME رو در مرحله 3 مشخص کردیم.
با فرض اینکه بانک اطلاعاتی ما، دارای 2 فیلد است (اولی از نوع عدد و دومی از نوع رشته)، پس پارامتر ارسال شده به متد Add مشخص کننده یک آرایه از نوع object به طول 2 خواهد بود که اولین خانه از آرایه مقداری عددی و دومین خانه از آرایه هم مقداری رشته ای است.
فقط همینطور که خودتون اشاره کردید، بانک اطلاعاتی شما دارای یک فیلد از نوع AutoNumber است، پس در حین اضافه کردن یک رکورد به dataSET باید یک فیلد از نوع عدد هم داشته باشید، مثلا در مثال شما، طول آرایه 4 خواهد بود، که اولین خانه از آرایه مربوط به AutoNumber است.
برای مثال در بانکی که شما در اولین پست از این تاپیک به آن اشاره کردید، باید رکورد را شبیه زیر به dataSET اضافه کرد:


dataSET.Tables[ "tableNAME" ].Rows.Add( new object[4] { anyNUMBER, System.Convert.ToInt32( textBox1.Text ), textBox2.Text, textBox3.Text } );

tableNAME نام جدولی که در مرحله 3 مشخص گردید.
anyNUMBER شماره ای است که میخواهیم برای فیلد AutoNumber در نظر بگیریم.
textBox ها هم داده های دریافتی از کاربر هستند.

6. باید دستور INSERT رو برای adapter مشخص کنیم، پس خواهیم داشت:


adapter.InsertCommand = new OleDbCommand( "INSERT INTO database_tableNAME (field1, field2, ...) VALUES (value1, value2, ...)", connection );

database_tableName همان نامی هست که در مرحله 2 مشخص شد.
field1 , field2 , ... اینها فیلدهای موجود در جدول هستند که نامشون رو ذکر میکنید. توجه کنید که اگر یک فیلد از نوع AutoNumber داشتید، نباید آنرا در لیست field ها قرار دهید.
value1, value2, ... مقادیری هستند که باید در جدول قرار گیرند تا یک رکورد به جدول اضافه شود. توجه کنید که اگر یک فیلد از نوع AutoNumber داشتید، نباید مقداری برای آن در لیست value ها قرار دهید.
برای مثال، در بانک اطلاعاتی که شما در اولین پست خود در این تاپیک عنوان کردید، باید دستور INSERT رو به شکل زیر تشکیل داد:


adapter.InsertCommand = new OleDbCommand( "INSERT INTO database_tableNAME (code, name, unit) VALUES (" + System.Convert.ToInt32(textBox1.Text).ToString() + ", '" + textBox2.Text + "', '" + textBox3.Text + "')", connection );


7. خوب، حال به کمک متد Update، بانک اطلاعاتی را بروز رسانی کرده و رکورد جدید به آن اضافه میشود.


adapter.Update( dataSET, "tableNAME" );

tableNAME در مرحله 3 مشخص شده است.
مراحل کار برای ویرایش و حذف رکورد، شبیه به فوق است فقط در مرحله 5 متفاوت اند. (در مرحله 6 نیز، از DeleteCommand, UpdateCommand استفاده میکنیم)

مهدی رحیم زاده
پنج شنبه 13 اردیبهشت 1386, 18:12 عصر
میشه بگید که من دقیقا باید مثلا برای insert کردن باید چه دستوری رو به setdata ارسال کنم ....
دوست عزیز توضیحات شما کاملا درسته ...
ولی من فقط میخوام بدونم که برای insert کردن چه دستوری رو باید به setdata بفرستم همین ...
ممنونم ...

PC2st
پنج شنبه 13 اردیبهشت 1386, 20:19 عصر
دوست عزیر... پیاده سازی متد setdata اشتباهه، چون دقیقا بعد از صدازدن متد Fill، متد Update هم آورده شده که واقعا انجام چنین کاری اشتباه است.
در ضمن در همین تابع، هیچ رکوردی به dt (همون شئ DataTable) اضافه نمیشه و در نتیجه متد Update رکوردی رو هم اضافه نمیکنه.
در واقع در پیاده سازی متد setdata، یک شئ از DataAdapter به نام da ساخته میشه و دستوری که به متد setdata فرستاده میشه، همون دستور SELECT ائی هست که برای شئ da مشخص میشه! بعبارت دیگه، اون دستور INSERT ائی که میخوای به setdata بفرستی، بعنوان دستور SELECT به da معرفی میشه و هیچگاه رکوردی اضافه نخواهد شد. فکر کنم اون error هائی هم که میده، ماله این هست که هنوز هیچ دستور INSERT ائی برای da مشخص نکردید.

با فرض اینکه پیاده سازی متد setdata درست باشه، شما باید دستور INSERT رو به شکل زیر به تابع بفرستید:


"INSERT INTO database_tableNAME (code, name, unit) VALUES (" + System.Convert.ToInt32(textBox1.Text).ToString() + ", '" + textBox2.Text + "', '" + textBox3.Text + "')"

مهدی رحیم زاده
پنج شنبه 13 اردیبهشت 1386, 20:25 عصر
دوست گلم ممنون...
من دستور insert رو از همین طریق ارسال می کنم بعضی جاها جواب میده و بعضی جاها جواب نمیده ...
اگر میشه شما بگید که من چکار کنم تا تابع setdata درست عمل کنه یعنی چه تغییراتی روی اون اعمال کنم ....

مهدی رحیم زاده
پنج شنبه 13 اردیبهشت 1386, 20:32 عصر
اینجوری درست میشه ؟؟؟

private void insert_data(string command, string incommand)
{
OleDbDataAdapter da = new OleDbDataAdapter(command, connect);
DataTable dt = new DataTable();
object[] obj = new object();
da.Fill(dt);
dt.Rows.Add(obj);
da.InsertCommand = new OleDbCommand(incommand, connect);
da.Update(dt);
}

PC2st
جمعه 14 اردیبهشت 1386, 00:12 صبح
حالا این متد درسته در صورتیکه شئ connect وجود داشته باشه و اونجا که این دستور رو نوشتید:


object[] obj = new object();

در واقع هنوز طول آریه رو مشخص نکردید پس باید اول طول آرایه مشخص بشه و بعد داده مقدار بگیرند، مثلا مثل زیر:


object[] obj = new object[3] { System.Convert.ToInt32(textBox1.Text), textBox2.Text, textBox3.Text };

که textBox ها از طریق کاربر گرفته میشه.
در اینصورت، تابع باید به درستی کار کنه.

اگر شما به وفور از تابع insert_data استفاده میکنید، بهتره که ایجاد اشیاء (مثل da و dt) و پر کردن شئ dt (تابع Fill) رو از این تابع بیرون بکشید و در جای دیگری قرار دهید و این اشیاء رو میتونید بعنوان پارامتر، به این تابع ارسال کنید، تا برای هر بار اضافه کردن یک رکورد، این موارد تکرار نشه. (چون فقط لازمه که یکبار اطلاعات به دیتاست ریخته بشه، نه بیشتر)

مهدی رحیم زاده
یک شنبه 16 اردیبهشت 1386, 09:19 صبح
مشکل این کد کجاست که من هرجوری اونو مینویسم یه اشکال میگیره ؟؟؟؟؟

"insert into Faktor(code,costomer_code,name,kala_name,misan,ghe ymat,tarikh,kol_gheymat) values(" +
"," + Convert.ToInt32(textBox1.Text) + "," + Convert.ToInt32(textBox2.Text) + ",'" + textBox3.Text + "'," +
",'" + textBox4.Text + "'," + Convert.ToDouble(textBox5.Text) + ","
+ Convert.ToInt32(textBox6.Text) + ",'" + textBox8.Text + "'," + Convert.ToInt32(textBox7.Text) + ")"

Alireza_Salehi
یک شنبه 16 اردیبهشت 1386, 10:13 صبح
اولا شما چه طوری قصد الحاق Double یا Int32 به یک رشته را دارید؟
قبلش باید از ToString استفاده کنید.

به چند نکته دقت کنید که دیگه در نوشتن کوئری مشکل پیدا نکنید:

1.از کلمات کلیدی SQL در نام جدول ها یا فیلد ها استفاده نکنید. اگر استفاده کردید در کوئری مورد نظر این نام را بین [] قرار دهید.

2.رشته کوئری را به هیچ وجه با الحاق رشته ها نسازید.
دلیل : امنیت پایین و خطای زیاد
به جای این کار پارامتر های مورد نظر را از طریق خاصیت Paremeters شی Command ارسال کنید.

3. اگر به جای این روش از SP استفاده کنید کارایی به مراتب بالاتر ، امنیت بالاتر و خطای بسیار کمتری خواهید داشت.



Dim cmd As New SqlCommand("insert into Faktor(code,costomer_code,name,kala_name,misan,ghe ymat,tarikh,kol_gheymat) values(@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8)", Con)
With cmd.Parameters
.Add("@t1", Data.SqlDbType.Int).Value = Convert.ToInt32(textBox1.Text)
.Add("@t2", Data.SqlDbType.Int).Value = Convert.ToInt32(textBox2.Text)
.Add("@t3", Data.SqlDbType.NVarChar).Value = textBox3.Text
.Add("@t4", Data.SqlDbType.NVarChar ).Value = textBox4.Text
.Add("@t5", Data.SqlDbType.Float).Value = Convert.ToDouble(textBox5.Text)
.Add("@t6", Data.SqlDbType.Int).Value = Convert.ToInt32(textBox6.Text)
.Add("@t7", Data.SqlDbType.NVarChar).Value = textBox8.Text
.Add("@t8", Data.SqlDbType.Int).Value = Convert.ToInt32(textBox7.Text)
EndWith

به نوع داده ها دقت کنید

SqlDbType Enumeration (http://www.barnamenevis.org/forum/ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref4/html/T_System_Data_SqlDbType.htm)

Mojtaba_ss
یک شنبه 16 اردیبهشت 1386, 11:04 صبح
دوست عزیز در تکمیل گفته های دوست عزیز arsp_2004 (http://barnamenevis.org/forum/member.php?u=33355) من یه تابع برای save نوشتم که کافیه فیلدها و ولیوهاتو پاس کنی بهمراه نام جدول اونوقت اونارو split می کنه و با یه حلقه اونو به روش Parameter برات save می کنه.
ConnectionString توی App.config ست شده بنابراین برای اینکه بتونی ولیوشو بخونی باید System.Configuration رو به برنامه خودت AddReference کنی.
ConnectionString توی App.config:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ConnectionString" value="Timeout=30;Packet Size=4096;Data Source=MOJTABA;Initial Catalog=Modares;Persist Security Info=True;User ID=MSL;Password=12345"/>
</appSettings>
</configuration>

کد تابع:



public static void SQL_Saving_Data(string Fields,string Values,string TableName)
{
object[] Parameter = Fields.Split(',');
object[] Parameter_Values = Values.Split(',');
string strValues = "";
for (int i = 0; i < Parameter.Length; i++)
{
strValues += "@" + Parameter[i] + ",";
}
int LastIndexvalue = strValues.LastIndexOf(',');
strValues = strValues.Substring(0, LastIndexvalue);
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationManager.AppSetti ngs["ConnectionString"];
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.Connection = con;
cmd.CommandTimeout = 60;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "INSERT INTO " + TableName + "( " + Fields + " )VALUES(" + strValues + ")";
System.Data.SqlClient.SqlParameter oSqlParameter = null;
for (int j = 0; j < Parameter.Length; j++)
{
oSqlParameter = new System.Data.SqlClient.SqlParameter();
oSqlParameter.ParameterName = "@" + Parameter[j] + "";
cmd.Parameters.Add(oSqlParameter);
cmd.Parameters[j].Value = Parameter_Values[j];
}
if (con.State != System.Data.ConnectionState.Open)
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}


نوبت به فراخونی تابع میرسه:



MS.Saving.Saving.SQL_Saving_Data(",UserName,Email,Code", "" + textBox1.Text + "," + textBox2.Text + "," + textBox3.Text + "", "tblUser");

مهدی رحیم زاده
یک شنبه 16 اردیبهشت 1386, 14:56 عصر
دوست عزیز سلام

به جای این کار پارامتر های مورد نظر را از طریق خاصیت Paremeters شی Command ارسال کنید.

3. اگر به جای این روش از SP استفاده کنید کارایی به مراتب بالاتر ، امنیت بالاتر و خطای بسیار کمتری خواهید داشت.


کد:
Dim cmd As New SqlCommand("insert into Faktor(code,costomer_code,name,kala_name,misan,ghe ymat,tarikh,kol_gheymat) values(@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8)", Con)
With cmd.Parameters
.Add("@t1", Data.SqlDbType.Int).Value = Convert.ToInt32(textBox1.Text)
.Add("@t2", Data.SqlDbType.Int).Value = Convert.ToInt32(textBox2.Text)
.Add("@t3", Data.SqlDbType.NVarChar).Value = textBox3.Text
.Add("@t4", Data.SqlDbType.NVarChar ).Value = textBox4.Text
.Add("@t5", Data.SqlDbType.Float).Value = Convert.ToDouble(textBox5.Text)
.Add("@t6", Data.SqlDbType.Int).Value = Convert.ToInt32(textBox6.Text)
.Add("@t7", Data.SqlDbType.NVarChar).Value = textBox8.Text
.Add("@t8", Data.SqlDbType.Int).Value = Convert.ToInt32(textBox7.Text)
EndWithبه نوع داده ها دقت کنید
می شه بیشتر توضیح بدین و این کد رو با C#2005بنویسید ....
آخه فکر کنم این کد با Vb باشه ...
ممنون

Mojtaba_ss
یک شنبه 16 اردیبهشت 1386, 16:42 عصر
دوست عزیز کدی که گذاشتم با C#2005 نوشته شده.اگه ازش استفاده کنی فکر کنم مشکلت حل شه(به روش پارامتر هم عمل می کنه)

مهدی رحیم زاده
یک شنبه 16 اردیبهشت 1386, 18:19 عصر
میشه در مورد اینکه چطوری connectionstring رو عوض کنم یه توضیحی بدین
ممنون

Mojtaba_ss
یک شنبه 16 اردیبهشت 1386, 18:28 عصر
هیچ مشکلی نیست
تو فایل App.config یه کلید بنام ConnectionString تعریف کردیمو مقداری رو می خوایم تو برنامه ازش استفاده کنیم رو توی value قرار دادیم.

conConnectionString = System.Configuration.ConfigurationManager.AppSetti ngs["ConnectionString"];
با این دستور value کلید ConnectionString که همون کانکشن استرینگ اصلی ما هستش رو خوندیم.
حالا اگه میخوای کانکشن استرینگ خودتو عوض کنی فقط کافیه که مقدار value رو اونجوری که دوست داری بنویسی(نام سرور و دیتابیس و یوزرنیم و پسورد)
خمین تابع رو با عوض کردن NameSpace میتونی برای پایگاه Access استفاده کنی.
امیدوارم که مشکلت حل شه!!!!!!!!

Alireza_Salehi
یک شنبه 16 اردیبهشت 1386, 19:15 عصر
دوست عزیز سلام

می شه بیشتر توضیح بدین و این کد رو با C#2005بنویسید ....
آخه فکر کنم این کد با Vb باشه ...
ممنون



SqlCommand cmd = new SqlCommand("insert into Faktor(code,costomer_code,name,kala_name,misan,ghe ymat,tarikh,kol_gheymat) values(@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8)", Con);
cmd.Parameters.Add("@t1", SqlDbType.Int).Value = Convert.ToInt32(textBox1.Text);
cmd.Parameters.Add("@t2", SqlDbType.Int).Value = Convert.ToInt32(textBox2.Text);
cmd.Parameters.Add("@t3", SqlDbType.NVarChar).Value = textBox3.Text;
cmd.Parameters.Add("@t4", SqlDbType.NVarChar ).Value = textBox4.Text;
cmd.Parameters.Add("@t5", SqlDbType.Float).Value = Convert.ToDouble(textBox5.Text);
cmd.Parameters.Add("@t6", SqlDbType.Int).Value = Convert.ToInt32(textBox6.Text);
cmd.Parameters.Add("@t7", SqlDbType.NVarChar).Value = textBox8.Text;
cmd.Parameters.Add("@t8", SqlDbType.Int).Value = Convert.ToInt32(textBox7.Text);

مهدی رحیم زاده
یک شنبه 16 اردیبهشت 1386, 23:55 عصر
دوستای عزیزم سلام
ممنونم از همتون که جوابمو دادین و میدین ...
ببینید من فهمیدم که اشکال کار من از کجاست . من میتونم با همون تابع insert_data که نوشتم داده ها رو توی بانک ذخیره کنم ، اما وقتی که یک فیلد رو تو بانک تغییر میدم یعنی یک فیلد به table اضافه می کنم ، دیگه نمیتونه که داده ها رو توی بانک ذخیره کنه تا وقتی که دوباره اون table رو ایجاد کنم و بعد دستورات رو بنویسم ...
دلیلش چیه و چکار کنم که دیگه اینجوری نشه ...
مرسی[بوسه][خجالت]

مهدی رحیم زاده
دوشنبه 17 اردیبهشت 1386, 17:47 عصر
کسی نیست که اینو جواب بده ....

hdv212
دوشنبه 17 اردیبهشت 1386, 17:56 عصر
ببین عزیزم اگه مشکلت اینه که برنامه درست کار میکنه، به محض اینکه جدول رو تغییر میدی یا فیلدی بهش اضافه میکنی به مشکل برمیخوری، باید دیتاست و SqlDataAdapter رو هم دوباره پیکربندی کنی.

مهدی رحیم زاده
دوشنبه 17 اردیبهشت 1386, 18:23 عصر
باید دیتاست و SqlDataAdapter رو هم دوباره پیکربندی کنی.

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

AhmadYousefi
شنبه 22 اردیبهشت 1386, 12:11 عصر
از کد زیر استفاده کن:
setdata("INSERT INTO Insert_kala_code([code],[name],[unit])VALUSE(" + Convert.ToInt32(textBox1.Text) +
",'" + textBox2.Text + "','" + textBox3.Text + "')");

مهدی رحیم زاده
چهارشنبه 02 خرداد 1386, 16:07 عصر
تابع:
کد:
public static void SQL_Saving_Data(string Fields,string Values,string TableName)
{
object[] Parameter = Fields.Split(',');
object[] Parameter_Values = Values.Split(',');
string strValues = "";
for (int i = 0; i < Parameter.Length; i++)
{
strValues += "@" + Parameter[i] + ",";
}
int LastIndexvalue = strValues.LastIndexOf(',');
strValues = strValues.Substring(0, LastIndexvalue);
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationManager.AppSetti ngs["ConnectionString"];
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.Connection = con;
cmd.CommandTimeout = 60;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "INSERT INTO " + TableName + "( " + Fields + " )VALUES(" + strValues + ")";
System.Data.SqlClient.SqlParameter oSqlParameter = null;
for (int j = 0; j < Parameter.Length; j++)
{
oSqlParameter = new System.Data.SqlClient.SqlParameter();
oSqlParameter.ParameterName = "@" + Parameter[j] + "";
cmd.Parameters.Add(oSqlParameter);
cmd.Parameters[j].Value = Parameter_Values[j];
}
if (con.State != System.Data.ConnectionState.Open)
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
mojtaba_ss عزیز
لطف کنید و این تابع رو برای بانک access هم برام بزارید ..
ممنون

Mojtaba_ss
چهارشنبه 02 خرداد 1386, 17:04 عصر
تبدیل ایم کد بسیار راحته.
کافیه بجای sql از oledb استفاده کنی،اینم کد:


public static void OLEDB_Saving_Data(string Fields, string Values, string TableName)
{
object[] Parameter = Fields.Split(',');
object[] Parameter_Values = Values.Split(',');
string strValues = "";
for (int i = 0; i < Parameter.Length; i++)
{
strValues += "@" + Parameter[i] + ",";
}
int LastIndexvalue = strValues.LastIndexOf(',');
strValues = strValues.Substring(0, LastIndexvalue);
System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection();
con.ConnectionString = System.Configuration.ConfigurationManager.AppSetti ngs["ConnectionString"];
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
cmd.Connection = con;
cmd.CommandTimeout = 60;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "INSERT INTO " + TableName + "( " + Fields + " )VALUES(" + strValues + ")";
System.Data.OleDb.OleDbParameter oOleDbParameter = null;
for (int j = 0; j < Parameter.Length; j++)
{
oOleDbParameter = new System.Data.OleDb.OleDbParameter();
oOleDbParameter.ParameterName = "@" + Parameter[j] + "";
cmd.Parameters.Add(oOleDbParameter);
cmd.Parameters[j].Value = Parameter_Values[j];
}
if (con.State != System.Data.ConnectionState.Open)
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}

برای راحتی کارت فایل #C که هم با sql و هم با access کار می کنه رو برات گذاشتم.