PDA

View Full Version : مشکل با درج رکورد جدید در پایگاه داده



sara_aryanfar
چهارشنبه 12 مرداد 1390, 22: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, 22:40 عصر
به آخرش این دوتارو اضافه کن
obe.ExecuteNonQuery();
cmd.Close();

sara_aryanfar
چهارشنبه 12 مرداد 1390, 22:55 عصر
این ارر رو داد73260

Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 01:12 صبح
براکت ها رو بردارید در غیر اینصورت فرض بر اینه که داخل براکت یه فیلده

sara_aryanfar
پنج شنبه 13 مرداد 1390, 01:42 صبح
برداشتم اما باز ارر رو میده Cannot insert explicit value for identity column in table 'salar' when IDENTITY_INSERT is set to OFF.

Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 01:50 صبح
اگه ممکنه اون تیکه از کد رو بزارید اینجا تا بشه دقیقتر بررسی کرد

sara_aryanfar
پنج شنبه 13 مرداد 1390, 02: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, 10: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, 11:58 صبح
میشه شما یه نمونه ساده بنویسید که با استفاده از همین کد مقدار داخل تکست باکس رو بزاره تو فیلد های sql و اونو تو دیتا گریدویو نشون بده ممنون میشم اگرم که مثل اون روز یه فیلم کوچک هم ازش بگیری خیلی عالیه راستش اون اموزشت خیلی عالی بود کاش همه اموزش های انجمن اونطوری بودن

Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 12:01 عصر
کدش رو مینویسم ولی ایجاد آموزش و آپلودش یکم طول میکشه

حدود یه رب بیست دقیقه ای

Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 12: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, 13:45 عصر
بازم برای من ارر داد 73275

البته برنامه ای که شما نویشتین چرا برا شما کار می کنه برا من نه؟

sara_aryanfar
پنج شنبه 13 مرداد 1390, 14:49 عصر
ممنون مشکل من حل شد من یه ارگومان اضافه می دادم یعنی اگز فیلد id رو بر داری حل میشه اما چرا اینطوری هست من فیلد id رو به عنوان key تعریف کردم یعنی مشکل از اون ناشی شده

Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 22:31 عصر
زمانی که فیلدی بصورت Identity در sqlserver تعریف میشه

خود sqlserver موقع insert بهش مقدار میده پس نیاز نیست ما بهش مقدار بدیم


ضمنا خطایی که برنامه میده به این خاطره که اینستنس sqlserver در کامپیوتر بنده .\sqlexp2005 است و در کامپیوتر شما .\sqlexpress

اگه این مورد را تغییر بدید (در فایل app.config) مشکل حله

موفق باشید.