PDA

View Full Version : مشکل در دستور insert به دیتابیس



fufuli
پنج شنبه 15 اسفند 1387, 20:50 عصر
سلام
من دارم برنامه انتخاب واحد می نویسم. به این صورت که چندتا درس تویdatagridview برای کاربر نمایش داده میشه که کنار هر درس یک checkbox هست.کاربر توی textbox شماره دانشجویی خود رو وارد میکنه، دروسی رو که میخوات تیک میزنه و دکمه اعمال رو میزنه. این کد روی باتن هست:



private

void btn_emal_Click(object sender, EventArgs e)

{
Boolean bValue;
int a = grd_dorouseterm.RowCount;
objCommand.Connection = objConnection3;
objConnection3.Open();
for (int i = 0; i < a; i++)
{
bValue = Convert.ToBoolean(grd_dorouseterm.Rows[i].Cells["Column1"].Value);
objCommand.CommandText = "INSERT INTO Entekhab_Vahed(id_stu,id_dars) VALUES(@id_stu,@id_dars)";


objCommand.Parameters.AddWithValue("@id_stu", textBox1.Text);
objCommand.Parameters.AddWithValue("@id_dars", grd_dorouseterm.Rows[i].Cells["id_dars"].Value);


if (bValue == true)
{
objCommand.ExecuteNonQuery();
MessageBox.Show("worked!");
}
}
objConnection3.Close();
}




مشکل اینه که این کد فقط اولین درس انتخاب شده رو به دیتابیس اضافه میکنه و برای دروس بعدی، این رو میده:





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





چی کار کنم؟؟!!

خیلی ممنون

Sajjad.Aghapour
پنج شنبه 15 اسفند 1387, 21:35 عصر
if(objCommand.Parameters.Contains("@id"))
objCommand.Parameters.Add("@id").value="..";
else
objCommand.Parameters.AddWithValue("@id","..");

saeed_zarei1847
پنج شنبه 15 اسفند 1387, 21:47 عصر
با سلام خدمت آقاي fufuli:
دوست من احتمالا id_stuو id_dars هر دو كليد هستند و به نظر مياد كه در id_dars يك مقدار دو بار در
ديتابيس (در ستون كليد) نوشته ميشود و كاملا غلط است.
سعي كن محتواي متفاوتي را هر دفعه insert كني .

fufuli
جمعه 16 اسفند 1387, 10:17 صبح
if(objCommand.Parameters.Contains("@id"))
objCommand.Parameters.Add("@id").value="..";
else
objCommand.Parameters.AddWithValue("@id","..");



ممنون که وقت میذارید
ازاین خط دوتا error میگیره:



objCommand.Parameters.Add("@id").value = "..";


error هاش هم ایناست:


Error 1 The left-hand side of an assignment must be a variable, property or indexer
Error 2 Cannot implicitly convert type 'string' to 'int'



ممنون میشم چک کنید مشکل کجاست

Sajjad.Aghapour
جمعه 16 اسفند 1387, 11:33 صبح
این فقط یه مثال بود.به جای ".." مقدار مورد نظر با توجه به نوع اون رو قرار بدید.اگه فیلد مربوطه int هست :


__.value=12;

fufuli
جمعه 16 اسفند 1387, 17:36 عصر
این فقط یه مثال بود.به جای ".." مقدار مورد نظر با توجه به نوع اون رو قرار بدید.اگه فیلد مربوطه int هست :


__.value=12;



بازم ممنون که وقت میذارید.
منم به جای ".."، مقدارش رو گذاشتم البته یه بار داخل علامت " و یه بار هم بدون "! (شانسه دیگه :خجالت:)


objCommand.Parameters.Add("@id_stu").value = textBox1.Text;
objCommand.Parameters.Add("@id_dars").value = grd_dorouseterm.Rows[i].Cells["id_dars"].Value

مشکل اینه که این تابع Add)"@id")اصلا property ای به نام value نداره یعنی کامپایلر هیچ property ی واسه تابع Add نمیشناسه. اینه که هر مدلی نوشتم خطا داد

کجای کارم اشتباهه؟

Sajjad.Aghapour
جمعه 16 اسفند 1387, 20:26 عصر
ببخشید چون من همین طوری بدون vs کد زدم حواسم به نوع نبود.شما باید اینطوری بنویسی


cmd.Parameters.Add("@id", SqlDbType.Int).Value = 12;

fufuli
جمعه 16 اسفند 1387, 23:11 عصر
ببخشید چون من همین طوری بدون vs کد زدم حواسم به نوع نبود.شما باید اینطوری بنویسی


cmd.Parameters.Add("@id", SqlDbType.Int).Value = 12;


ممنون. نوشتمش دیگه اون error رو نداد اما دوباره برگشت سرجای اول و همون خطای اولی رو میداد:



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

اما راهش رو پیدا کردم! اونم استفاده از تابع clear() در ابتدای حلقه for است:


private


void btn_emal_Click(object sender, EventArgs e)



{



Boolean bValue;
int a = grd_dorouseterm.RowCount;
objCommand.Connection = objConnection3;
objConnection3.Open();
for (int i = 0; i < a; i++)
{
objCommand.Parameters.Clear();

bValue = Convert.ToBoolean(grd_dorouseterm.Rows[i].Cells["Column1"].Value);
objCommand.CommandText = "INSERT INTO Entekhab_Vahed(id_stu,id_dars) VALUES(@id_stu,@id_dars)";







objCommand.Parameters.AddWithValue("@id_stu", textBox1.Text);

objCommand.Parameters.AddWithValue("@id_dars", grd_dorouseterm.Rows[i].Cells["id_dars"].Value);






if (bValue == true)

{

objCommand.ExecuteNonQuery();
MessageBox.Show("worked!");
}
}
objConnection3.Close();
}







به همین سادگی!!
به هر حال خیلی ممنونم