PDA

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



Arashdn
شنبه 11 شهریور 1391, 11:23 صبح
سلام دوستان
من کد زیر رو نوشتم تا بتونم فیلد prname در جدول Product رو اپدیت کنم
try
{
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\db\adnstore.accdb");

conn.Open();
OleDbCommand cmd = conn.CreateCommand();

cmd.Parameters.Add("@Name", OleDbType.Char).Value = textBox1.Text;

cmd.CommandText = "UPDATE Product SET prname=@Name" +
"WHERE ID=1";
cmd.ExecuteNonQuery();

MessageBox.Show("connected to data source");

}
catch
{
MessageBox.Show("مشکل در اتصال به پایگاه داده", "خطا");

}

ولی همش catch اجرا میشه و ارور مشکل در اتصال به پایگاه داده ام رو میگیرم
ولی موقعی که فقط کانکشن رو میزنم وصل میشه و کانکشن مشکلی نداره
به نظرتون ایراد از چیه؟
ممنون

Mahmoud Zaad
شنبه 11 شهریور 1391, 11:35 صبح
سلام
catch رو به صورت زیر بنویس تا دقیقاً معلوم بشه خطا کجاست بعد اون خطا رو اینجا قرار بده.
catch

(Exception ex)

{
MessageBox.Show(ex.Message);
}

Arashdn
شنبه 11 شهریور 1391, 11:57 صبح
با دیدن ارورش مشکل خودمم حل شد
تمام مشکل این بود که بعد Name فاصله نزده بودم ..

یه سوال دیگه
چطوری میشه یه حلقه تکرار تعریف کرد که دستور
cmd.Parameters.Add("@Name", OleDbType.Char).Value = textBox1.Text;

cmd.CommandText = "UPDATE Product SET prname=@Name" +
"WHERE ID=1";

بصورتی بشه که محتوای تکست باکس 1 ، آیدی 1 رو اپدیت کنه ، تکست باکس 2 آیدی 2 رو و الی آخر
تعداد آیدی ها در متغیری به اسم idcount ذخیره هست
ممنون

Arashdn
شنبه 11 شهریور 1391, 15:37 عصر
با دیدن ارورش مشکل خودمم حل شد
تمام مشکل این بود که بعد Name فاصله نزده بودم ..

یه سوال دیگه
چطوری میشه یه حلقه تکرار تعریف کرد که دستور
cmd.Parameters.Add("@Name", OleDbType.Char).Value = textBox1.Text;

cmd.CommandText = "UPDATE Product SET prname=@Name" +
"WHERE ID=1";

بصورتی بشه که محتوای تکست باکس 1 ، آیدی 1 رو اپدیت کنه ، تکست باکس 2 آیدی 2 رو و الی آخر
تعداد آیدی ها در متغیری به اسم idcount ذخیره هست
ممنون
ممنون
خودم پیداش کردم ...

harani
شنبه 11 شهریور 1391, 20:35 عصر
خب پاسختونو درج کنید تا دیگرانم استفاده کنن .

Arashdn
یک شنبه 12 شهریور 1391, 08:26 صبح
من این شکلی پیاده اش کردم
for (int j = 1; j < idcount; j++)
{
try
{
conn.Open();
OleDbCommand cmd = conn.CreateCommand();
TextBox textboxx = (TextBox)Controls["textBox" + j];
cmd.Parameters.Add("@Name", OleDbType.Char).Value = textboxx.Text;

cmd.CommandText = "UPDATE Product SET prname=@Name " +
"WHERE ID="+j.ToString();
cmd.ExecuteNonQuery();

conn.Close();

}//try

catch (Exception ex)
{
MessageBox.Show(ex.Message);
break;
}//catch

یه سوال دیگه (اینو که مطمعنم همه بلدن پس لطفا راهنمایی کنید)
چطور میشه کاری کرد که اگر یک داده در دیتابیس موجود بود یه فیلد رو آپدیت کنه و اگر موجود نبود یه Insert انجام بده ؟
ممنون

Arashdn
دوشنبه 13 شهریور 1391, 12:32 عصر
یه سوال دیگه (اینو که مطمعنم همه بلدن پس لطفا راهنمایی کنید)
چطور میشه کاری کرد که اگر یک داده در دیتابیس موجود بود یه فیلد رو آپدیت کنه و اگر موجود نبود یه Insert انجام بده ؟
ممنون
یعنی یه نفرم نیست به داد ما برسه؟

Mahmoud Zaad
دوشنبه 13 شهریور 1391, 21:04 عصر
سلام مجدد
مثل زیر یه متد تعریف می کنی که چک کنه ببیینه آی دی وجود داره یا نه. فقط آی دی نباید autonumber باشه.



private bool IdExist(int id)
{
try
{






OleDbDataAdapter da =
new OleDbDataAdapter("SELECT * FROM Product WHERE ID=@p1", cn);






da.SelectCommand.Parameters.AddWithValue(
"@p1", id);







DataTable Product = new DataTable();





da.Fill(Product);







if (Product.Rows.Count > 0)







return true;







else







return false;





}







catch (Exception ex)





{







MessageBox.Show(ex.Message, "Error");


}
}



طریقه استفاده اش هم اینطوریه:



if


(IdExist(Int32.Parse(textBox1.Text)) == true)




{






//Update Method




}






else




{






//Insert Method




}


این ویرایشگر سایت (تگ #) هم مشکل پیدا کرده، الکی فاصله میندازه، نگید نگفت!

Arashdn
چهارشنبه 15 شهریور 1391, 16:59 عصر
با تشکر از کمک همه دوستان

دو تا سوال دیگه
چطور میشه تمام فیلد های یک ستون از دیتابیس رو ریخت روی یه آرایه؟

چطور میشه تمام فیلد های یک ستون از دیتابیس روکلا با هم جمع زد ؟

ممنون

Arashdn
پنج شنبه 16 شهریور 1391, 13:58 عصر
کسی نیست به داد ما برسه؟