PDA

View Full Version : مبتدی: مشکل این کد چیه (ساده) درج در بانک



mammad_asir
دوشنبه 19 بهمن 1388, 13:57 عصر
این کد را برای درج در بانک sql اکسپرس نوشتم ولی نمیدونم چرا در قسمت اینزررت وقتی روی باتن کلیک میکنم ارور میده البته اگه کسی کار با دیتا ست هم تو این درج قرار بده ممنون میشم .


private void button1_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
DataSet ds =new DataSet();

if (txtfname.Text == "" || txtlname.Text == "" || txtcodozv.Text == "")
{
MessageBox.Show("error");
}
conn.Open();
cmd.CommandText = ("INSERT INTO Database1(" + "codeozviat," + "fname," + "lname," + "namepedar," + "tarikhtavalod," + "shomaremeli," + "telephon," + "address," + "tarikhozviat," + "tarikhengheza" + ") VALUSE(" + txtcodozv.Text + "," + txtfname.Text + "," + txtlname.Text + "," + txtnamepedar.Text + "," + mtxttarikhtavalod.Text + "," + Convert.ToInt16(txtmeli.Text) + "," + Convert.ToInt16(txttelephon.Text ) + "," + txtaddress.Text + "," + mtxttarikhozviat.Text + "," + mtxttarikhengheza.Text);
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();

}

sg.programmer
دوشنبه 19 بهمن 1388, 16:35 عصر
" + "codeozviat," + "fname," + "

احتیاجی به گذاشتن کوتیشن برای فیلد هات نیست

درضمن اون ارور چیه
یا بقول دوست مون کد بزاره
یا فیلد های جدولت از چه نوع ای هست

اگه این موارد مشخص کنی زودتر به جواب میرسی

FastCode
دوشنبه 19 بهمن 1388, 18:17 عصر
VALUSE باید بشه VALUES
باید در آخر کد یه پرانتز بسته اضافه کنید.
و بهتره که از سینتکس ''N برای فیلد های رشته ای استفاده کنید.

mammad_asir
دوشنبه 19 بهمن 1388, 20:42 عصر
ممنون دوستان از اینکه راهنمایی کردید
از اینکه گفتین سورس را قرار بده کل سورس برنامه من همینه یعنی برای امتحان همین یه تیکه را نوشتم که با اررور مواجه شدم در ضمن values را هم درست کردم و کلیه فیلد های من از نو nchar(...) است و وارد کردن سه فیلد اول اجباریه دوستان از لطفتون ممنون من این برنامه را خیلی زود احتیاج دارم لطف کنید راهنمایی کنید
در ضمن سینتکس "N یعنی چی؟

FastCode
دوشنبه 19 بهمن 1388, 21:05 عصر
باید در آخر کد یه پرانتز بسته اضافه کنید.
این کار رو کردید؟
سینتکس ''N هم یعنی اینکه

, " + textbox1.text + ", -----> , N'" + textbox1.text + "',

mammad_asir
دوشنبه 19 بهمن 1388, 22:47 عصر
پرانتز که درسته اضافه کردم ولی سینتکس میده .
ولی من
قسمت اینزرت را با این کد تغییر دادم


cmd.CommandText = ("insert into aza values('" + txtcodozv + "','" + txtfname + "','" + txtlname + "','" + txtnamepedar + "','" + mtxttarikhtavalod + "','" + txtmeli + "','" + txttelephon + "','" + txtaddress + "','" + mtxttarikhozviat + "','" + mtxttarikhengheza + "')");

ولی حالا در قسمت
cmd.ExecuteNonQuery(); ارور میده یعنی اجرا میشه ولی وقتی داده وارد میکنم وکلیک میکنم اینجا گیر میکنه
در ضمن من فیلد های تاریخ را در mask قرار دادم (فکر نکنم مشکلی باشه چون در دیتابیس همشون از نوع nchar هستند)
ممنونم دوست عزیز

mammad_asir
دوشنبه 19 بهمن 1388, 22:54 عصر
پرانتز که درسته (زوج)
ولی من قسمت اینزرت را با این کد تغییر دادم


cmd.CommandText = ("insert into aza values('" + txtcodozv + "','" + txtfname + "','" + txtlname + "','" + txtnamepedar + "','" + mtxttarikhtavalod + "','" + txtmeli + "','" + txttelephon + "','" + txtaddress + "','" + mtxttarikhozviat + "','" + mtxttarikhengheza + "')");

حالا در قسمت

cmd.ExecuteNonQuery();
ارور میده یعنی برنامه اجرا میشه وقتی داده وارد میکنم و کلیک میکنم این قسمت ارور میده ممنون دوست عزیز منتظرم
اگه یه نمونه کار در همین زمینه بدی ممنون میشم والا موندم توش

jeyjix
دوشنبه 19 بهمن 1388, 22:57 عصر
گلم ارورت مربوط به کانکشنت نی ؟
شکل درست دستور هم :
("+insert into post (post_creator,post_date,post_text)values("+text1.text+","+text2.text+","+text3.text

Yasersadegh
سه شنبه 20 بهمن 1388, 09:34 صبح
سلام خدمت همه دوستان عزیز

این کد را برای درج در بانک sql اکسپرس نوشتم ولی نمیدونم چرا در قسمت اینزررت وقتی روی باتن کلیک میکنم ارور میده البته اگه کسی کار با دیتا ست هم تو این درج قرار بده ممنون میشم .


privatevoid button1_Click(object sender, EventArgs e)
{
SqlConnection conn = newSqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand cmd = newSqlCommand();
SqlDataAdapter da = newSqlDataAdapter();
DataTable dt = newDataTable();
DataSet ds =newDataSet();

if (txtfname.Text == "" || txtlname.Text == "" || txtcodozv.Text == "")
{
MessageBox.Show("error");
}
conn.Open();
cmd.CommandText = ("INSERT INTO Database1(" + "codeozviat," + "fname," + "lname," + "namepedar," + "tarikhtavalod," + "shomaremeli," + "telephon," + "address," + "tarikhozviat," + "tarikhengheza" + ") VALUSE(" + txtcodozv.Text + "," + txtfname.Text + "," + txtlname.Text + "," + txtnamepedar.Text + "," + mtxttarikhtavalod.Text + "," + Convert.ToInt16(txtmeli.Text) + "," + Convert.ToInt16(txttelephon.Text ) + "," + txtaddress.Text + "," + mtxttarikhozviat.Text + "," + mtxttarikhengheza.Text);
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();

}


دوست عزيز من كامند استرينگ در پست اولتون رو به شكل زير تغيير دادم!! اگه نوع فيلدهاي بانكتون رو درست حدس زده باشم با اين كد مشكلي پيش نخواهد اومد!!



cmd.CommandText = "INSERT INTO Database1(codeozviat,fname,lname,namepedar,tarikht avalod,shomaremeli,telephon,address,tarikhozviat,t arikhengheza) VALUSE('" + txtcodozv.Text + "',N'" + txtfname.Text + "',N'" + txtlname.Text + "',N'" + txtnamepedar.Text + "','" + mtxttarikhtavalod.Text + "'," + Convert.ToInt16(txtmeli.Text) + "," + Convert.ToInt16(txttelephon.Text ) + ",N'" + txtaddress.Text + "','" + mtxttarikhozviat.Text + "','" + mtxttarikhengheza.Text+"')";




ولی حالا در قسمت
cmd.ExecuteNonQuery(); ارور میده یعنی اجرا میشه ولی وقتی داده وارد میکنم وکلیک میکنم اینجا گیر میکنه
در ضمن من فیلد های تاریخ را در mask قرار دادم (فکر نکنم مشکلی باشه چون در دیتابیس همشون از نوع nchar هستند)
ممنونم دوست عزیز
دوست عزيز اروري كه در قيمت ExecuteNonQuery به شما ميده مربوط ميشه به همين كامند استريگتون!!
كدي كه گذاشتم رو جايگزين كد پست اولتون كنيد انشاالله مشكلتون حل ميشه!!
موفق باشيد:چشمک:

mammad_asir
سه شنبه 20 بهمن 1388, 12:13 عصر
ممنون دوست عزیز من قسمت اینزرت را با کد زیر تغییر دادم


cmd.CommandText = ("+insert into aza (codeozviat,fname,lname,namepedar,tarikhtavalod,sh omaremeli,telephon,address,tarikhozviat,tarikhengh eza)values("+txtcodozv+","+txtfname+","+txtlname +","+txtnamepedar +","+mtxttarikhtavalod +","+txtmeli +","+txttelephon +","+txtaddress +","+mtxttarikhozviat +","+mtxttarikhengheza );

ولی بازم در قسمت

cmd.ExecuteNonQuery();
اررور میده
به فریادم برسید***

Yasersadegh
سه شنبه 20 بهمن 1388, 13:29 عصر
دوست عزيز چرا اينطوري مي كنيد!!:عصبانی++::عصبانی::عصبا ی++:
من به شما مي گم كدي كه براتون گذاشتم رو جايگذين كنيد برميداريد كدتون رو هر طور مي خواهيد تغيير مي ديد دوباره پيغام ميديد كه ارور داره!!:عصبانی++:
دوست عزيز كاري كه بهتون گفتم رو انجام بديد مشكلتون حل ميشه!!:عصبانی:
مشكل كد شما هم اينه كه علامت تك كوتيشن برايه فيلدهاي nvarchar نذاشتيد!!(به كدي كه گذاشتم مراجعه كنيد!):عصبانی:

موفق باشيد:چشمک:

slashslash2009
سه شنبه 20 بهمن 1388, 13:46 عصر
mamod asir کدتون که پر از اشکاله بعدشم به خطاهایی که میده دقت کنید خودش میگه کجای دستورinsert مشکل داره از کد زیر هم میتونید استفاده کنید کلا اگه از روش ارسال پارامتر استفاده کنید بهتره

strSQL = "insert into table(name,family,code) values(@nm,@fam,@cd)";
con.Open();
com = new SqlCommand(strSQL, con);
com.Parameters.Add("@nm", SqlDbType.NVarChar).Value = textBox1.Text;
com.Parameters.Add("@fam", SqlDbType.NVarChar).Value = textBox2.Text;
com.Parameters.Add("@cd", SqlDbType.NVarChar).Value = textBox3.Text;
com.ExecuteNonQuery();
con.Close();قبل از فرم لود:

private string strSQL;
private SqlConnection con;
private SqlDataAdapter da;
private SqlCommand com;در فرم لود :

con = new SqlConnection();
con.ConnectionString = (@"data source=.\sqlexpress;Initial catalog=databasename;Integrated Security=true");
تغییراته مربوط به کد insert رو خودتون بدین منظورم نوشتن فیلدای خودتون و نام تیبل . nm@ یا fam@ نام پارامتری هست که ارسال میشه واسه هر فیلدی خودتون یه چیزی بزارید

FastCode
سه شنبه 20 بهمن 1388, 14:23 عصر
ممنون دوست عزیز من قسمت اینزرت را با کد زیر تغییر دادم


cmd.CommandText = ("+insert into aza (codeozviat,fname,lname,namepedar,tarikhtavalod,sh omaremeli,telephon,address,tarikhozviat,tarikhengh eza)values("+txtcodozv+","+txtfname+","+txtlname +","+txtnamepedar +","+mtxttarikhtavalod +","+txtmeli +","+txttelephon +","+txtaddress +","+mtxttarikhozviat +","+mtxttarikhengheza );

ولی بازم در قسمت

cmd.ExecuteNonQuery();
اررور میده
به فریادم برسید***

دوست عزیز لطفا" یه ذره به کدتون دقت کنید.

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

","+mtxttarikhengheza ); ----->>> ","+mtxttarikhengheza + ")" );

راستی اون + قبل از insert چیه؟

mammad_asir
سه شنبه 20 بهمن 1388, 15:23 عصر
ممنون دوستان عزیز
آقای yaser sadegh من کانکتم به اینترنت قطع و وصل میشد واسه همین صفحه دوم پاسخ را ندیدم ببخشید
ممنون دوستان عزیز با اضافه کردن کد زیر دیگه ارور نمیده


cmd.CommandText = "INSERT INTO aza(codeozviat,fname,lname,namepedar,tarikhtavalod ,shomaremeli,telephon,address,tarikhozviat,tarikhe ngheza) VALUES('" + txtcodozv.Text + "',N'" + txtfname.Text + "',N'" + txtlname.Text + "',N'" + txtnamepedar.Text + "','" + mtxttarikhtavalod.Text + "'," + Convert.ToInt32(txtmeli.Text) + "," + Convert.ToInt32(txttelephon.Text) + ",N'" + txtaddress.Text + "','" + mtxttarikhozviat.Text + "','" + mtxttarikhengheza.Text + "')";
ولی وقتی من در بانک درج میکنم با کد زیر


private void frm_listozv_Load(object sender, EventArgs e)
{
// this.azaTableAdapter.Fill(this.database1DataSet1.a za);

DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
string strsql = "SELECT * FROM aza";
SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
conn .Open();
da = new SqlDataAdapter (strsql, conn);
da .Fill(ds, "aza");
dataGridView1.DataBindings.Add(new Binding("DataSource", ds, "aza"));
conn.Close();
dataGridView1.ReadOnly = true;
}
جدول را در داخل رویداد لود فرم دیگه داخل دیتا گرید ویو نشون میدم جدول را با در نظر گرفتن رکورد جدید نشون میده ولی وقتی در قسمتserver explorer با راست کلیک روی جدول مورد نظر گذینه show table data را انتخاب میکنم دیگه اون رکورد های اضافه شده را در جدول نمیبینم و وقتی دوباره برنامه را اجرا میکنم دیگه اون فیلد های قبلی رو نشون نمیده یعنی در پایگاه ذخیره نمیکنه باید چه کدی را در کدام قسمت اضافه کنم در ضمن اگه بخوام کار اضافه کردن را با دیتاست (برای سرعت بیشتر) انجام بدم با ید چه کنم
ممنون دوستان دمتون گرم از کمکهاتون
خیلی ببخشدی گیر عجب آدم .... اوفتادین شما.

FastCode
سه شنبه 20 بهمن 1388, 16:17 عصر
1.GOOGLE خیلی سریعتر میتونه مشکل شما رو حل کنه.
2.دیتاست مهمترین عامل کاهش سرعت برنامه هاست.
3.کد شما اصلا" دستور insert رو انجام نمیده.
4.بهتره که از sqlcommandbuilder استفاده کنید.
5.بهتره اول یکم sql یاد بگیرید بعد برنامه بنویسید و دوستان رو هم با error های مسخره خسته نکنید.

موفق باشید(سال دیگه که برنامه نویسی یاد گرفتید)
google (http://www.google.com)
google (http://www.google.com)
google (http://www.google.com)
google (http://www.google.com)
google (http://www.google.com)