PDA

View Full Version : مشکل با ذخیره اطلاعات در بانک



morteza_1234m
جمعه 18 اردیبهشت 1388, 11:40 صبح
دوستان من کدی مثل زیر نوشتم

string source = "server=(local);integrated security=SSPI;database=PaperList;";
SqlConnection conn = new SqlConnection(source);
SqlCommand comd = new SqlCommand();
comd.Connection = conn;
comd.CommandText = "INSERT INTO emp (name,family,father name,shsh,id,loc birth,birth,title,salary,address,tel) VALUES (@name,@family,@father name,@shsh,@id,@loc birth,@birth,@title,@salary,@address,@tel)";
comd.Parameters.AddWithValue("@name",textBox1.Text);
comd.Parameters.AddWithValue("@family",textBox2.Text);
comd.Parameters.AddWithValue("@father name",textBox3.Text);
comd.Parameters.AddWithValue("@shsh",textBox4.Text);
comd.Parameters.AddWithValue("@id",textBox5.Text);
comd.Parameters.AddWithValue("@loc birth",textBox7.Text);
comd.Parameters.AddWithValue("@title",textBox8.Text);
comd.Parameters.AddWithValue("@salary",textBox6.Text);
comd.Parameters.AddWithValue("@tel",textBox9.Text);
comd.Parameters.AddWithValue("@user id", textBox11.Text);
comd.Parameters.AddWithValue("@address", textBox10.Text);
conn.Open();
comd.ExecuteNonQuery();
conn.Close();
ولی error میگیره
یکی از دوستان کمک کردن و گفتن کد رو به صورت زیر تغییر بده ولی موفقیت آمیز نبود

comd.Parameters.Add("@name", SqlDbType.NVarChar, 20).Value = textBox1.Text;

احمد سامعی
جمعه 18 اردیبهشت 1388, 12:34 عصر
شما بايد اول پارامترها رو ست كني بعد كامند تكس، خط كامند تكس بيار پايين قبل از باز كردن كانكشن يا بعدش فرقي نمي كنه

morteza_1234m
جمعه 18 اردیبهشت 1388, 13:10 عصر
کردم ولی جواب نداد نه قبلش و نه بعدش

Line 1: Incorrect syntax near 'nvarchar'.
Line 1: Incorrect syntax near 'name'.
اینم ارورش

mahdi_7610
جمعه 18 اردیبهشت 1388, 19:49 عصر
شما باید توی برنامه اتون data type را همونی قرار بدی که توی دیتابیس تعریف کردید .

یعنی توی دیتابیس هم باید name را NVarChar (20) تعریف کرده باشید .

موفق باشی .

morteza_1234m
جمعه 18 اردیبهشت 1388, 21:08 عصر
خوب همین کارو کردم اینم نمونش

string source = "server=(local);integrated security=SSPI;database=PaperList;";
SqlConnection conn = new SqlConnection(source);
SqlCommand comd = new SqlCommand();
comd.Connection = conn;
comd.Parameters.Add("@_name", SqlDbType.NVarChar, 20).Value = textBox1.Text;
comd.Parameters.Add("@_family", SqlDbType.NVarChar, 20).Value = textBox2.Text;
comd.Parameters.Add("@_father name", SqlDbType.NVarChar, 20).Value = textBox3.Text;
comd.Parameters.Add("@_shsh", SqlDbType.BigInt, 11).Value = System.Convert.ToInt64(textBox4.Text);
comd.Parameters.Add("@_user id", SqlDbType.BigInt, 11).Value = System.Convert.ToInt64(textBox5.Text);
comd.Parameters.Add("@_salary", SqlDbType.Money, 8).Value = textBox6.Text;
comd.Parameters.Add("@_loc birth", SqlDbType.NVarChar,20).Value = textBox7.Text;
comd.Parameters.Add("@_title", SqlDbType.NVarChar, 20).Value = textBox8.Text;
comd.Parameters.Add("@_tel", SqlDbType.NVarChar, 11).Value = textBox9.Text;
comd.Parameters.Add("@_address", SqlDbType.Text, 16).Value = textBox10.Text;
comd.Parameters.Add("@_id", SqlDbType.NVarChar, 20).Value = textBox11.Text;
comd.CommandText = "INSERT INTO emp (name,family,father name,shsh,id,loc birth,birth,title,salary,address,tel) VALUES (@_name,@_family,@_father name,@_shsh,@_id,@_loc birth,@_birth,@_title,@_salary,@_address,@_tel)";
conn.Open();

comd.ExecuteNonQuery();
conn.Close();

احمد سامعی
جمعه 18 اردیبهشت 1388, 21:49 عصر
خوب 2 كار بكن ببيني از كدوم فيلد خطا مي گيره
1. مستقيم مقدار بده و از روش پارامتر استفاده نكن
comd.CommandText = "INSERT INTO emp (name) VALUES('"+textBoxName.Text+"')"
فقط در اين روش حواست به فيلدهايي كه مجوز null ندادي باشه و مقدارهاي عددي هم داخل ' ' قرار نمي گيره
يايكي يكي فيلدها اضافه كن يعني اول يك فيلد بعد دوتا عد سه تا ... معلوم مي شه تو كدوم مشكل داره يكم وقت گيره ولي من همين كار مي كنم
2. يكي يكي فيلدهاي رو اينزرت كن تا ببيني كدوم مشكل داره (چون تعداد فيلدها زياد، بايد يكي يكي تست كني ببيني با كدوم مشكل داره و از بريك ديباگ بزار ببين وقت اجرا آيا كامند تكس درست يا نه ؟

morteza_1234m
جمعه 18 اردیبهشت 1388, 22:10 عصر
انجام دادم و کد زیر را نوشتم و نوع پیغام خطا عوض شد

comd.CommandText = "INSERT INTO emp (name) VALUES ("+textBox1.Text+")";
و پیغام خطا زیر را میده


The name 'morteza' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted.

mahdi_7610
شنبه 19 اردیبهشت 1388, 00:01 صبح
کانکشن را توی form_Load تعریف کن


SqlConnection con = new SqlConnection("server=(local);integrated security=SSPI;database=PaperList");

دستورات insert را هم به صورت زیر بنویس





private void btnSave_Click(object sender, EventArgs e)
{
try
{
strSQL = "INSERT INTO emp (name,family,father name,shsh,id,loc birth,birth,title,salary,address,tel) VALUES (@name,@family,@father name,@shsh,@id,@loc birth,@birth,@title,@salary,@address,@tel)";
con.Open();
SqlCommand cmd = new SqlCommand(strSQL, con);
cmd.Parameters.Add("@name", SqlDbType.NVarChar, 20).Value = textBox1.Text;
cmd.Parameters.Add("@family", SqlDbType.NVarChar, 20).Value = textBox2.Text;
cmd.Parameters.Add("@[father name]", SqlDbType.NVarChar, 20).Value = textBox3.Text;
cmd.Parameters.Add("@shsh", SqlDbType.BigInt, 11).Value = System.Convert.ToInt64(textBox4.Text);
cmd.Parameters.Add("@[user id]", SqlDbType.BigInt, 11).Value = System.Convert.ToInt64(textBox5.Text);
cmd.Parameters.Add("@salary", SqlDbType.Money, 8).Value = textBox6.Text;
cmd.Parameters.Add("@[loc birth]", SqlDbType.NVarChar,20).Value = textBox7.Text;
cmd.Parameters.Add("@title", SqlDbType.NVarChar, 20).Value = textBox8.Text;
cmd.Parameters.Add("@tel", SqlDbType.NVarChar, 11).Value = textBox9.Text;
cmd.Parameters.Add("@address", SqlDbType.Text, 16).Value = textBox10.Text;
cmd.Parameters.Add("@id", SqlDbType.NVarChar, 20).Value = textBox11.Text;
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("اطلاعات وارد شد");
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}



موفق باشی

Ai_Kord
شنبه 19 اردیبهشت 1388, 01:16 صبح
گویا کدهاتون با php است. من php کار نکردم. ممکنه مطالبی که میگم تو پی اچ پی بی ربط باشه. ولی تو sqlserver (موقع نوشتن commandtext ها و ..) اسم ستونهاییکه با space از هم جدا میشن مثل father name باید به شکل [father name] داخل کروشه نوشته شن تا مشخص بشه که به یک فیلد واحد اشاره دارن.

احمد سامعی
شنبه 19 اردیبهشت 1388, 01:33 صبح
اين پيغام خطا مي گه شما اجازه دسترسي به اين فيلد نداريد
نمي دونم چرا اين پيغام مي ده اما احتمال خيلي خيلي زياد بايد مشكل از بانك باشه يعني خوب درست نكرده و يكجا ايراد داره
كد دوستمون آقا مهدي رو هم امتحان كن اگر نشد بانكت فقط همين جدولش آپلود كن ببنيم چي كار مي شه كرد
در ضمن يك راه ديگه هم داري واسه اين كه كوئري درست واسه اينزرت داشته باشي
يك DataAdapter اگر اضافه نكردي اضافه كن. وقتي مي خواهي به فرم اضافش كني ازت مسير فايل پايگاه داده مي خواد كه بعد همينجور كه داري نكس مي زني به جايي مي رسي كه بايد حتماً يك كوئري تعريف كني اونجا يك كوئري سلكت معمولا بساز تا اجازه فنيش بده اما قبلش يك كوئري اينزرت ازش بگير بايد تك تك فيلدهايي كه مي خواي اينزرت بشه تيك بزني (از Select All استفاده نكن) بعد هرچي پايين بهت داد كپي كن تو كدهاي برنامت يكم ور بري راهش پيدا مي كني
اگر نفهميدي و به جواب نرسيدي و نتونستي بانكت آپلود كني بگو تا از مراحل اين نوع كوئري گرفت عكس بگيرم واست بزرام. اين روش بهترين كوئري مي ده چون خودش مي ده و استاندارد
يك راه ديگه هم داري ساده تر بعد از اين كه ديتاآداپتر به فرم اضافه كردي پراپرتيزش رو تو فرم باز كن 4 تا گذينه واسه سلكت آپديت حذف و اينزرت بهت مي ده كه راحت مي توني كوئري بگيري

احمد سامعی
شنبه 19 اردیبهشت 1388, 01:36 صبح
گویا کدهاتون با php است. من php کار نکردم. ممکنه مطالبی که میگم تو پی اچ پی بی ربط باشه. ولی تو sqlserver (موقع نوشتن commandtext ها و ..) اسم ستونهاییکه با space از هم جدا میشن مثل father name باید به شکل [father name] داخل کروشه نوشته شن تا مشخص بشه که به یک فیلد واحد اشاره دارن.

دوست عزيز اول پست بخون آخه تالار SQL چه ربطي به PHP داره اين آقا مرتضي اشتباهي بجاي اينكه كدهاش تو تگ( كد) بزاره تو تگ PHP گذاشته

اما از نكته اي كه اشاره كردين منون حرفتون درست .

morteza_1234m
یک شنبه 20 اردیبهشت 1388, 00:12 صبح
در مورد راهمنایی دوست عزیز آقا مهدی بگم که اررور زیر رو داد

http://www.megaupload.com/?d=L5KV1Y1K
ولی در مورد راهنمایی دوست عزیز آقای احمد سامعی گل هم بگم که هر چی گشتم شی به نام DataAdapter در نوار ابزارم پیدا نکردم

احمد سامعی
یک شنبه 20 اردیبهشت 1388, 00:37 صبح
ولی در مورد راهنمایی دوست عزیز آقای احمد سامعی گل هم بگم که هر چی گشتم شی به نام DataAdapter در نوار ابزارم پیدا نکردم

خوب ببخشيد قصد قضاوت ندرم اما مثل اينكه شما يكم تازه كار هستيد كه مهم نيست من هم يكم كمتر تازه كارم:چشمک:
خيلي از كنترل ها به صورت پيش فرض در تولزباكس نيست براي اضافه كردنش بايد وقتي موس رو ToolsBox كليك راست كني بعد يك گذينه داره به اسم Chooies ... كه بزني يك فرم باز مي شه و مي توني اونجا كنترل هاي ديگه رو به تولزباكست Add كني ( در ضمن براي اضافه كردن كنترل هاي سفارشي هم بايد همين مسيري بري و يا Active X ها و يا كامپونت هاي com)

morteza_1234m
یک شنبه 20 اردیبهشت 1388, 08:53 صبح
دوست عزیز اونجا هم نبود ولی از یکی از دوستانم که یک فایل پروژه داشت را گرفتم و dll آن را اضافه کردم بعد از این به قسمت choose پیدا شد
ولی خوب هنوز مشکل بهقوت خودش باقیه
من کارهایی رو که گفته بودید را انجام دادم ولی باز هم نشد
پس بنابر در خواست یکی از اساتید محترم فایل بانکم که با microsoft sql 2000 هست رو براتون میذارم
http://www.megaupload.com/?d=3Z0LB7N6

احمد سامعی
یک شنبه 20 اردیبهشت 1388, 16:11 عصر
دوست عزیز اونجا هم نبود ولی از یکی از دوستانم که یک فایل پروژه داشت را گرفتم و dll آن را اضافه کردم بعد از این به قسمت choose پیدا شد
خوب اينكه نگو نبود چون نتونستي پيداش كني دليل بر نبودنش نيست شايد من اشتباه گفتم بايد SqlDataAdapter اسم كاملش مي نوشتم فكر كردم مي فهمي


من واست فايلي كه گذاشته بودي فقط جدول اول اصلاح كردم بعضي از تايپ ها رو اشتباه گذاشته بودي(هميشه اين كار را كسي واست نمي كنه)
يك برنامه تست هم واسه همون DB خودت پيوست كردم كه بايد DB اصلاح شده رو از اين لينك (http://focusteam.ir/SQL_Server_Using_in_C#_Demo.zip) بگيري(هاست خودم گرفتي pm خصوصي بده تا پاكش كنم)

من از VS 2008 استفاده مي كنم اگر نتونستي پروژه رو باز كني فايل Form1.cs و Form1.Designer.cs باز كن مي بيني چي به چي در ضمن خودت رو به روز كن مخصوصاً ديگه از SQL Server 2000 استفاده نكن مشكل زياد داره و تكنولوژي 10 سال پيش.

براي استفاده از فايل exe بايد فايل هاي DB كه از هاست من گرفتي كنار فايل exe قرار بدي(دانت دو استفاده كردم بتوني اجرا كني) و براي اديت پروژه تست بايد فايل DB در كنار فايل Form1.cs هم قرار بدي

يك نكته ديگه وقتي پروژه رو اديت مي كني با هر بار ديباگ كردن فايل DB دوباره تو پوشه ديباگ كپي مي شه و اطلاعاتي وارد مي كني از بين مي ره چون فايل اجرايي همون فايل DB داخل پوشه ديباگ رو استفاده مي كنه كه VS هي صفرش مي كنه پس نگران نباش يا هم فايل DB در جاي ديگه بزار و مسير كانكشن استرينگ عوض كن

morteza_1234m
دوشنبه 21 اردیبهشت 1388, 11:53 صبح
دوست عزیز با تشکر بسیار فراوان الان میرم نگاهش می کنم ببینم چه طوری شده
البته مشکلم حل شد با تغییر کد به صورت زیر

string str1 = "INSERT INTO emp(name,family,[father name],shsh,address,tel,[loc birth],salary,title,id ,[user id]) VALUES (@name, @family,@fathername,@shsh,@address,@tel,@locbirth, @salary,@title,@id1,@userid )";//, @[father name], @shsh, @address, @tel, @[loc birth], @salary, @title)"; ,@locbirth,@salary,@title,@id
SqlConnection con = new SqlConnection("server=.;integrated security=True;database=PaperList");

try
{

con.Open();
SqlCommand cmd = new SqlCommand(str1, con);
cmd.Parameters.AddWithValue("@name",textBox1.Text);
cmd.Parameters.AddWithValue("@family",textBox2.Text);
cmd.Parameters.AddWithValue("@fathername",textBox3.Text);
cmd.Parameters.AddWithValue("@shsh",Convert.ToInt64(textBox4.Text));
cmd.Parameters.AddWithValue("@id1",Convert.ToInt64(textBox5.Text));
cmd.Parameters.AddWithValue("@address",textBox10.Text);
cmd.Parameters.AddWithValue("@tel",textBox9.Text);
cmd.Parameters.AddWithValue("@locbirth",textBox7.Text);
cmd.Parameters.AddWithValue("@userid", textBox11.Text);
cmd.Parameters.AddWithValue("@salary",Convert.ToInt64(textBox6.Text));
cmd.Parameters.AddWithValue("@title",textBox8.Text);
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("اطلاعات وارد شد");
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}