PDA

View Full Version : سوال: مشکل در اجرای ExecuteNonQuery



emperor8778
چهارشنبه 08 اردیبهشت 1389, 13:11 عصر
سلام دوستان. در حال طراحی سایتی هسنم که قراره بعد از ثبت نام یه سری اطلاعات تکمیلی رو از کاربر بگیره و ذخیره کنه. برای گرفتن این اطلاعات این کدها رو نوشتم :


protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection conn = null;
SqlTransaction trans = null;
SqlCommand cmd;

string strcon = "Data Source=MILAD-PC\\SQLEXPRESS;Initial Catalog=gcd;Integrated Security=True";
conn = new SqlConnection(strcon);
conn.Open();
trans = conn.BeginTransaction();
cmd = new SqlCommand();
cmd.Connection = conn;
cmd.Transaction = trans;
cmd.CommandText = "insert into details(username,fname,lname,burn,state,city,addre ss,postcode,tel) values (@username,@fname,@lname,@burn,@state,@city,@addre ss,@postcode,@tel)";

cmd.Parameters.Add("username", SqlDbType.NVarChar, 20);
cmd.Parameters.Add("fname", SqlDbType.NVarChar, 25);
cmd.Parameters.Add("lname", SqlDbType.NVarChar, 30);
cmd.Parameters.Add("burn", SqlDbType.NVarChar, 18);
cmd.Parameters.Add("state", SqlDbType.NVarChar, 21);
cmd.Parameters.Add("city", SqlDbType.NVarChar, 30);
cmd.Parameters.Add("address", SqlDbType.NVarChar, 250);
cmd.Parameters.Add("postcode", SqlDbType.NVarChar, 11);
cmd.Parameters.Add("tel", SqlDbType.NVarChar, 12);

cmd.Parameters.AddWithValue("@username", Label2.Text);
cmd.Parameters.AddWithValue("@fname", TextBox2.Text);
cmd.Parameters.AddWithValue("@lname", TextBox3.Text);
string day = DropDownList2.SelectedItem.ToString();
string month = DropDownList3.SelectedItem.ToString();
string year = DropDownList4.SelectedItem.ToString();
cmd.Parameters.AddWithValue("@burn", day + " " + month + " " + year);
cmd.Parameters.AddWithValue("@state", DropDownList1.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@city", TextBox6.Text);
cmd.Parameters.AddWithValue("@address", TextBox7.Text);
cmd.Parameters.AddWithValue("@postcode", TextBox8.Text);
cmd.Parameters.AddWithValue("@tel", TextBox9.Text);

cmd.ExecuteNonQuery();
conn.Close();

Response.Redirect("default.aspx");

}


}


ولی بعد از اینکه برنامه اجرا میشه و کاربر اطلاعاتش رو وارد می کنه و روی دکمۀ ثبت کلیک می کنه، برنامه از خطی Executenonquery خطا می گیره. رنگ این خط رو در قسمت کد قرمز کردم. خطایی که برنامه می گیره این هستش :

The variable name '@username' has already been declared. Variable names must be unique within a query batch or stored procedure.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.


لطفاً اگه ممکنه راهنمایی کنین. پیشاپیش ممنونم.

amirbiglari
چهارشنبه 08 اردیبهشت 1389, 14:30 عصر
سلام من معمولا کانکشن رو به این شکل تعریف می کنم یه امتحانی بکن .


conn.ConnectionString = "Data Source=" & Server.MachineName & ";Initial Catalog=dbname;user id=administrator;Integrated Security=True"

موفق باشید

emperor8778
چهارشنبه 08 اردیبهشت 1389, 18:19 عصر
سلام من معمولا کانکشن رو به این شکل تعریف می کنم یه امتحانی بکن .


conn.ConnectionString = "Data Source=" & Server.MachineName & ";Initial Catalog=dbname;user id=administrator;Integrated Security=True"
موفق باشید


دوست عزیز مشکل همچنان پابرجاست.
من فکر نمی کنم مشکل از کانکشن استرینگ باشه، چون کانکشن open میشه

Nightbat
چهارشنبه 08 اردیبهشت 1389, 18:39 عصر
چرا پارامترها رو 2 بار تعریف کردی ؟

Himalaya
چهارشنبه 08 اردیبهشت 1389, 18:40 عصر
cmd.CommandText = "insert into details(username,fname,lname,burn,state,city,addre ss,postcode,tel) values (@username,@fname,@lname,@burn,@state,@city,@addre ss,@postcode,@tel)";

cmd.Parameters.Add("username", SqlDbType.NVarChar, 20);
.
.
.
cmd.Parameters.AddWithValue("@username", Label2.Text);


اول اینکه چرا دوبار 2 بار مقدار دهی کردی...

بعد اینکه اون مقدار دهی اول واسه چیه؟ اون که @ نداره !!!

emperor8778
چهارشنبه 08 اردیبهشت 1389, 22:45 عصر
اول اینکه چرا دوبار 2 بار مقدار دهی کردی...

بعد اینکه اون مقدار دهی اول واسه چیه؟ اون که @ نداره !!!

سلام دوست عزیز. ممنون از اینکه راهنمایی کردین. @ها رو یادم رفته بود! :لبخند:
البته من اطلاعات چندانی درمورد AddWithValue نداشتم. یکی از دوستان توی همین تالار پیشنهاد کردن. یعنی هم مقدار میده هم به کامند Add می کنه؟ پس تایپش رو کجا مشخص می کنه؟ اگه می دونین توضیح بدین تا من هم متوجه بشم.
به هر حال من از این کدها جواب گرفتم :


protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=MILAD-PC\\SQLEXPRESS;Initial Catalog=gcd;Integrated Security=True");
string q = "insert into details(un,fname,lname,burn,state,city,address,pos tcode,tel) values (@un,@fname,@lname,@burn,@state,@city,@address,@po stcode,@tel)";
SqlCommand command1 = new SqlCommand(q, con);

SqlParameter param1 = new SqlParameter("@un", SqlDbType.NVarChar, 20);
SqlParameter param2 = new SqlParameter("@fname", SqlDbType.NVarChar, 25);
SqlParameter param3 = new SqlParameter("@lname", SqlDbType.NVarChar, 30);
SqlParameter param4 = new SqlParameter("@burn", SqlDbType.NVarChar, 18);
SqlParameter param5 = new SqlParameter("@state", SqlDbType.NVarChar, 21);
SqlParameter param6 = new SqlParameter("@city", SqlDbType.NVarChar, 30);
SqlParameter param7 = new SqlParameter("@address", SqlDbType.NVarChar, 250);
SqlParameter param8 = new SqlParameter("@postcode", SqlDbType.NVarChar, 11);
SqlParameter param9 = new SqlParameter("@tel", SqlDbType.NVarChar, 12);

command1.Parameters.Add(param1);
command1.Parameters.Add(param2);
command1.Parameters.Add(param3);
command1.Parameters.Add(param4);
command1.Parameters.Add(param5);
command1.Parameters.Add(param6);
command1.Parameters.Add(param7);
command1.Parameters.Add(param8);
command1.Parameters.Add(param9);

command1.Parameters["@un"].Value = Label2.Text.ToString();
command1.Parameters["@fname"].Value = TextBox2.Text;
command1.Parameters["@lname"].Value = TextBox3.Text;
string day = DropDownList2.SelectedItem.ToString();
string month = DropDownList3.SelectedItem.ToString();
string year = DropDownList4.SelectedItem.ToString();
command1.Parameters["@burn"].Value = day + month + year;
command1.Parameters["@state"].Value = DropDownList1.SelectedItem.ToString();
command1.Parameters["@city"].Value = TextBox6.Text;
command1.Parameters["@address"].Value = TextBox7.Text;
command1.Parameters["@postcode"].Value = TextBox8.Text;
command1.Parameters["@tel"].Value = TextBox9.Text;

con.Open();
command1.ExecuteNonQuery();
con.Close();

Response.Redirect("default.aspx");

}
}

متشکرم از توجهتون

Himalaya
پنج شنبه 09 اردیبهشت 1389, 00:02 صبح
همون بالایی درسته فقط این قسمتو پاک کن. لازم نیست نوعش رو مشخص کنی


cmd.Parameters.Add("username", SqlDbType.NVarChar, 20);
cmd.Parameters.Add("fname", SqlDbType.NVarChar, 25);
cmd.Parameters.Add("lname", SqlDbType.NVarChar, 30);
cmd.Parameters.Add("burn", SqlDbType.NVarChar, 18);
cmd.Parameters.Add("state", SqlDbType.NVarChar, 21);
cmd.Parameters.Add("city", SqlDbType.NVarChar, 30);
cmd.Parameters.Add("address", SqlDbType.NVarChar, 250);
cmd.Parameters.Add("postcode", SqlDbType.NVarChar, 11);
cmd.Parameters.Add("tel", SqlDbType.NVarChar, 12);

exlord
پنج شنبه 09 اردیبهشت 1389, 10:03 صبح
اولا ... یه خورده زبانتو تقویت کن .. این اررور خودش داره میگه که@username بیشتر از 1 بار تعریف شده ..
در ضمن این 3 خط رو میتونی با هم ادغام کنی ....

SqlParameter param1 = new SqlParameter("@un", SqlDbType.NVarChar, 20);
command1.Parameters.Add(param1);
command1.Parameters["@un"].Value = Label2.Text.ToString();در 1 سطر ...

command1.Parameters.Add("@un", SqlDbType.NVarChar, 20).Value = Label2.Text.ToString();

emperor8778
پنج شنبه 09 اردیبهشت 1389, 10:38 صبح
همون بالایی درسته فقط این قسمتو پاک کن. لازم نیست نوعش رو مشخص کنی


cmd.Parameters.Add("username", SqlDbType.NVarChar, 20);
cmd.Parameters.Add("fname", SqlDbType.NVarChar, 25);
cmd.Parameters.Add("lname", SqlDbType.NVarChar, 30);
cmd.Parameters.Add("burn", SqlDbType.NVarChar, 18);
cmd.Parameters.Add("state", SqlDbType.NVarChar, 21);
cmd.Parameters.Add("city", SqlDbType.NVarChar, 30);
cmd.Parameters.Add("address", SqlDbType.NVarChar, 250);
cmd.Parameters.Add("postcode", SqlDbType.NVarChar, 11);
cmd.Parameters.Add("tel", SqlDbType.NVarChar, 12);




سلام دوست عزیز. این کار رو کردم. ولی جواب نگرفتم. به هر حال ممنون

emperor8778
پنج شنبه 09 اردیبهشت 1389, 10:40 صبح
اولا ... یه خورده زبانتو تقویت کن .. این اررور خودش داره میگه که@username بیشتر از 1 بار تعریف شده ..
در ضمن این 3 خط رو میتونی با هم ادغام کنی ....

SqlParameter param1 = new SqlParameter("@un", SqlDbType.NVarChar, 20);
command1.Parameters.Add(param1);
command1.Parameters["@un"].Value = Label2.Text.ToString();در 1 سطر ...

command1.Parameters.Add("@un", SqlDbType.NVarChar, 20).Value = Label2.Text.ToString();

چیکار کنیم دیگه! تازه کاریم! شما ببخش!
بابت کد هم ممنون. جواب داد. ولی ممکنه یخورده درمورد AddWithValue توضیح بدین؟

exlord
پنج شنبه 09 اردیبهشت 1389, 11:37 صبح
AddWithValue یه پارامتر اضافه میکنه لا مقدارش ولی دیگه نمیشه نوع و طولشو تعیین کنیم ...