View Full Version : مشکل با درج رکورد جدید در پایگاه داده
sara_aryanfar
چهارشنبه 12 مرداد 1390, 23:31 عصر
چرا این کد عمل نمی کنه و هیچ رکوردی در دیتا بیس ثبت نمیشه
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection cmd = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=moslem;Integrated Security=True;Pooling=False");
SqlCommand obe=new SqlCommand();
obe.Connection=cmd;
cmd.Open();
obe.CommandText="INSERT INTO salar"+"(id,name,fami)"+"VALUES(1,'mmmmmmmmmmm','aaaaaaaa')";
}
akarsu
چهارشنبه 12 مرداد 1390, 23:40 عصر
به آخرش این دوتارو اضافه کن
obe.ExecuteNonQuery();
cmd.Close();
sara_aryanfar
چهارشنبه 12 مرداد 1390, 23:55 عصر
این ارر رو داد73260
Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 02:12 صبح
براکت ها رو بردارید در غیر اینصورت فرض بر اینه که داخل براکت یه فیلده
sara_aryanfar
پنج شنبه 13 مرداد 1390, 02:42 صبح
برداشتم اما باز ارر رو میده Cannot insert explicit value for identity column in table 'salar' when IDENTITY_INSERT is set to OFF.
Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 02:50 صبح
اگه ممکنه اون تیکه از کد رو بزارید اینجا تا بشه دقیقتر بررسی کرد
sara_aryanfar
پنج شنبه 13 مرداد 1390, 03:30 صبح
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
string conection = @"Data Source=.\sqlexpress;Initial Catalog=sara;Integrated Security=True;Pooling=False";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection cmd = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=moslem;Integrated Security=True;Pooling=False");
SqlCommand obe=new SqlCommand();
obe.Connection=cmd;
obe.CommandText="INSERT INTO salar(id,arya,yoma)VALUES(1,'mmmmmmmmmmm','aaaaaaa a')";
cmd.Open();
obe.ExecuteNonQuery();
cmd.Close();
}
Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 11:47 صبح
دوست عزیز کد درسته موردی نداره
احتمالا شما جای دیگه ای تو کد یا SQL مورد دارید
گه کد رو داخل بلوک try catch بذارید میتونید خطا رو مدیریت کنید
try
{
SqlConnection cmd = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=sara;Integrated Security=True;Pooling=False");
SqlCommand obe = new SqlCommand();
obe.Connection = cmd;
obe.CommandText = "INSERT INTO salar(id,arya,yoma)VALUES(1,'mmmmmmmmmmm','aaaaaaa a')";
cmd.Open();
obe.ExecuteNonQuery();
cmd.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
sara_aryanfar
پنج شنبه 13 مرداد 1390, 12:58 عصر
میشه شما یه نمونه ساده بنویسید که با استفاده از همین کد مقدار داخل تکست باکس رو بزاره تو فیلد های sql و اونو تو دیتا گریدویو نشون بده ممنون میشم اگرم که مثل اون روز یه فیلم کوچک هم ازش بگیری خیلی عالیه راستش اون اموزشت خیلی عالی بود کاش همه اموزش های انجمن اونطوری بودن
Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 13:01 عصر
کدش رو مینویسم ولی ایجاد آموزش و آپلودش یکم طول میکشه
حدود یه رب بیست دقیقه ای
Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 13:38 عصر
اگه شما در برنامه از TableAdapter دارید استفاده میکنید این نشون میده که دیتاست ایجاد کردید بصورت ویزاردی
حالا موقع ایجاد تیبل آداپتر در دیتاست اگه دقت کنید تو مراحل آخرش یه چک باکس داره که میگه آیا دستورات مستقیم DB Direct Command رو هم ایجاد کنه؟
بصورت پیش فرض هم انتخاب شده هست کار این تیک اینه که دستورات Insert-Update-Delete رو بصورت کد مستقیم SQL ایجاد میکنه و جزو متدهای تیبل آداپتر قرار میده یه چیزی مثل post تو دلفی.
شما نیاز نیست دیتاگرید رو با تیبل آداپتر فیل کنید بعد برای افزودن رکورد جدید از کلاس SqlCommand استفاده کنید بلکه میتونید از متد Insert همون تیبل آداپتر استفاده کنید.
برا اینکه این دستور مستقیم اطلاعات را در دیتابیس مینویسه پس چون با دیتاست شما مچ نیست بعد از افزودن اطلاعات طبیعتا رکورد جدید در گرید دیده نمیشه پس نیازه که تغییر اطلاعات رو به گرید اعمال کنیم
اینجا میشه دو کار کرد :
1: استفاده از متد GetData() از همون تیبل آداپتر به اینصورت
dataGridView1.DataSource = salarTableAdapter.GetData();
2 : استفاده از متد Fill از همون تیبل آداپتر به اینصورت
salarTableAdapter.Fill(this.saraDataSet.salar);
اولی دیتاست رو بروز نمیکنه و فقط دیتاگرید رو از لحاظ اطلاعات بروز میکنه
ولی دومی هم دیتاست و هم دیتاگرید رو از لحاظ اطلاعات بروز میکنه
امیدوارم مفید بوده باشه.
فایل نمونه برنامه و آموزشش رو هم آپ کرم
با این لینک
http://ifile.it/qnayi4c
موفق باشید.
sara_aryanfar
پنج شنبه 13 مرداد 1390, 14:45 عصر
بازم برای من ارر داد 73275
البته برنامه ای که شما نویشتین چرا برا شما کار می کنه برا من نه؟
sara_aryanfar
پنج شنبه 13 مرداد 1390, 15:49 عصر
ممنون مشکل من حل شد من یه ارگومان اضافه می دادم یعنی اگز فیلد id رو بر داری حل میشه اما چرا اینطوری هست من فیلد id رو به عنوان key تعریف کردم یعنی مشکل از اون ناشی شده
Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 23:31 عصر
زمانی که فیلدی بصورت Identity در sqlserver تعریف میشه
خود sqlserver موقع insert بهش مقدار میده پس نیاز نیست ما بهش مقدار بدیم
ضمنا خطایی که برنامه میده به این خاطره که اینستنس sqlserver در کامپیوتر بنده .\sqlexp2005 است و در کامپیوتر شما .\sqlexpress
اگه این مورد را تغییر بدید (در فایل app.config) مشکل حله
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.