PDA

View Full Version : مشکل با کار کردن با SQL Express در Visual Studio 2010



martoor
یک شنبه 04 تیر 1391, 14:16 عصر
با سلام خدمت اساتید محترم

بنده یه جدول توی بانک SQL Express ام درست کردم و کد های زیر رو هم درون محیط کد قرار دادم:

private void button1_Click(object sender, EventArgs e)
{
string apppath;
apppath = Application.StartupPath;
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=localhost\SQLEXPRESS; AttachDbFilename=" + apppath + @"\Data.mdf; integrated security=true; User Instance=True";
//con.ConnectionString = @"server=localhost\\sqlexpress;database=mydatab ase1 ;integrated security=true";
con.Open();

SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO taha (bname, author) VALUES ('" + textBox1.Text +"', '" + textBox2.Text +"');";
cmd.ExecuteNonQuery();
MessageBox.Show("Added Successfully!");
con.Close();
}

یه DataGridView هم به فرمم اضافه کردم که اطلاعات اینو نشون بده، حالا مشکلم اینه که وقتی دیتا رو اضافه می کنم و برنامه رو می بندم و دوباره باز می کنم، دیتا رو نشون می ده توی بانک، Insert شده. ولی در حقیقت Insert نشده و وقتی سیستم رو خاموش روشن می کنم، می بینم که اضافه نشده جدول به حالت قبل برگشته و یا وقتی همون لحظه بعد اضافه شدن کد Show Table Data می زنم می بینم که دیتا هام اضافه نشده.

veniz2008
یک شنبه 04 تیر 1391, 16:11 عصر
سلام،من که متوجه نشدم آخرش اضافه میشه یا نه! (جمله هاتون آرایه پارادوکس داره!!!)،وقتی داده رو داخل جدول نشون نمیده یعنی insert صورت نگرفته(شما به اون مسیج باکس کاری نداشته باش، احتمالا چون اون پیغام ظاهر میشه شما فکر میکنید که داده ها ثبت شدن، نه اونطوری نیست دوست من)،شما commandtext خودتون رو بصورت زیر اصلاح کنید:

cmd.CommandText = "INSERT INTO taha (bname, author) VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "')";

martoor
یک شنبه 04 تیر 1391, 16:43 عصر
سلام،من که متوجه نشدم آخرش اضافه میشه یا نه! (جمله هاتون آرایه پارادوکس داره!!!)،وقتی داده رو داخل جدول نشون نمیده یعنی insert صورت نگرفته(شما به اون مسیج باکس کاری نداشته باش، احتمالا چون اون پیغام ظاهر میشه شما فکر میکنید که داده ها ثبت شدن، نه اونطوری نیست دوست من)،شما commandtext خودتون رو بصورت زیر اصلاح کنید:

cmd.CommandText = "INSERT INTO taha (bname, author) VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "')";


نه دوست عزیز :لبخند:، اینقدر ها هم دیگه وضعم خراب نیست، من از مدیران ارشد سیستم مدیریت محتوای دیتالایف انجینم (http://dlefa.ir/user/%D8%B1%D8%B6%D8%A7+%D9%85%D9%82%D8%AF%D9%85/news/) مشکل اینه که خیلی وقته C# کار نکردم و الان هم 2010 نصب کردم و فوق العاده مثل چی توی گل گیر کردم :افسرده: ...

اون CommandText رو که اطمینان دارم بدون مشکله.
در حقیقت داده ها توی بانک ذخیره نمی شن ولی تا زمانی که سیستم رو ریست نکردم داده ها رو مثل حالتی که کش کرده باشه توی DataGridView روی فرم نشون می ده :عصبانی++: نمی دونم چیکار باید بکنم ...

veniz2008
یک شنبه 04 تیر 1391, 16:53 عصر
قصد بی احترامی نداشتم دوست عزیز( اگر جملاتم چنین مفهومی رو انعکاس میده معذرت میخوام)، میتونید از کدهای زیر استفاده کنید(روان تر و ساده تر از کدهای خودتون هست):


SqlConnection con = new SqlConnection("Data Source = (local);Initial Catalog = tel; Integrated Security = True;");
con.Open();
SqlCommand cmd = new SqlCommand("insert into student(name,family)values(N'"+textBox2.Text+"' ,N'"+textBox3.Text + "')",con);
cmd.ExecuteNonQuery();
MessageBox.Show("مشخصات با موفقیت ثبت شد");


con.Close();

parseh21
جمعه 31 مرداد 1393, 14:08 عصر
من کدهای مختلفی رو امتحان کردم اما ارتباط با sql برقرار نمی شود. واضح تر اینکه در گریدویو نمایش می دهد اما نمی توانم اطلاعات جدید رو انتقال بدهم و همین طور ویرایش و حذف.
کدهایی که دوستمون در بالا قرار داده اند و موارد مشابه دیگر را امتحان کردم اما نتیجه ای ندارد.
لطفا مرا راهنمایی بفرمایید.

mrprestige
جمعه 31 مرداد 1393, 15:08 عصر
من کدهای مختلفی رو امتحان کردم اما ارتباط با sql برقرار نمی شود. واضح تر اینکه در گریدویو نمایش می دهد اما نمی توانم اطلاعات جدید رو انتقال بدهم و همین طور ویرایش و حذف.
کدهایی که دوستمون در بالا قرار داده اند و موارد مشابه دیگر را امتحان کردم اما نتیجه ای ندارد.
لطفا مرا راهنمایی بفرمایید.
سلام ، دوست عزیز میشه مشکلتون رو واضح تر بگید متوجه نشدم

parseh21
جمعه 31 مرداد 1393, 15:30 عصر
خوشبختانه این مورد حل شد. چند جایی رو ویرایش کردم درست شد.
دوستان از درون گریدویو اگر بخواهم با زدن دکمه اونها رو ویرایش یا حذف کنم باید چطوری انجام بدم.
اگر کدشو قرار بدید ممنون می شم.

من این کدها رو قرار دادم. اگر مشکلی داره شما اصلاح کنید.

SqlConnection con = new SqlConnection(Connection);

SqlCommand cmd = new SqlCommand("Update tuser Set FullName=@FullName Where Tell=@Tell Where Email=@Email;", con);

cmd.Parameters.AddWithValue("@FullName", textName.Text);

cmd.Parameters.AddWithValue("@Tell", textTell.Text);

cmd.Parameters.AddWithValue("@Email", textEmail.Text);

con.Open();

cmd.ExecuteNonQuery();

con.Close();

Fill();

mrprestige
جمعه 31 مرداد 1393, 17:18 عصر
خوشبختانه این مورد حل شد. چند جایی رو ویرایش کردم درست شد.
دوستان از درون گریدویو اگر بخواهم با زدن دکمه اونها رو ویرایش یا حذف کنم باید چطوری انجام بدم.
اگر کدشو قرار بدید ممنون می شم.

من این کدها رو قرار دادم. اگر مشکلی داره شما اصلاح کنید.

SqlConnection con = new SqlConnection(Connection);

SqlCommand cmd = new SqlCommand("Update tuser Set FullName=@FullName Where Tell=@Tell Where Email=@Email;", con);

cmd.Parameters.AddWithValue("@FullName", textName.Text);

cmd.Parameters.AddWithValue("@Tell", textTell.Text);

cmd.Parameters.AddWithValue("@Email", textEmail.Text);

con.Open();

cmd.ExecuteNonQuery();

con.Close();

Fill();



روی Grid view یه بار کلیک کن بعد روی Add Column... کلیک کن تو صفحه ای که باز شده تو قسمت Header Text اسمی که میخوای رو تایپ کن ( حذف یا ویرایش یا ... ) بعد تو قسمت Type کلیک کن و گزینه DataGrid View Button Column رو انتخاب کن بعد ok کن ، بعد از اون برو توصفحه کدنویسی Data Grid این خط کد رو تایپ کن


string a = "delete from اسم جدول where نام ستون=" + dataGridView1.CurrentRow.Cells[0].Value.ToString();
sqlConnection con = new sqlConnection(Connection String);
con.Open();
sqlCommand cmd = new sqlCommand(a, con);


cmd.ExecuteNonQuery();
dataGridView1.Rows.Remove(dataGridView1.CurrentRow );
con.Close();


البته این کدی که برات مثال زدم عمل حذف رو انجام میده شما میتونین به هر کدی که خواستید تغییرش بدید من فقط خواستم اصولش رو بهتون بگم . موفق یاشید

parseh21
جمعه 31 مرداد 1393, 18:16 عصر
راستش من دو دکمه اون پایین گذاشتم, یکی برای ویرایش و دیگری برای حذف.
تو پروژه قبلی با اکسس کار می کردم کدها راحت کار می کردند و عملیات انجام می شد. اما اینجا گیج شدم چرا ایراد می گیره.

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

ویرایش:
public void button3_Click(object sender, EventArgs e)
{
if (dataGridView1.CurrentRow != null)
{
textName.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
textTell.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
textEmail.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();
EditID = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString());
button1.Text = "ویرایش";
}
}

حذف:

public void button4_Click(object sender, EventArgs e)
{
if (dataGridView1.CurrentRow != null)
{
if (MessageBox.Show("آیا از حذف مطمئن هستید ؟", "هشدار", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
int ID = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString());
SqlConnection con = new SqlConnection(Connection);
con.Open();
SqlCommand com = new SqlCommand("Delete From tuser Where uid=" + uid, con);

com.ExecuteNonQuery();

con.Close();
BindGrid();
}
}
}

mrprestige
جمعه 31 مرداد 1393, 19:25 عصر
راستش من دو دکمه اون پایین گذاشتم, یکی برای ویرایش و دیگری برای حذف.
تو پروژه قبلی با اکسس کار می کردم کدها راحت کار می کردند و عملیات انجام می شد. اما اینجا گیج شدم چرا ایراد می گیره.

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

ویرایش:
public void button3_Click(object sender, EventArgs e)
{
if (dataGridView1.CurrentRow != null)
{
textName.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
textTell.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
textEmail.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();
EditID = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString());
button1.Text = "ویرایش";
}
}

حذف:

public void button4_Click(object sender, EventArgs e)
{
if (dataGridView1.CurrentRow != null)
{
if (MessageBox.Show("آیا از حذف مطمئن هستید ؟", "هشدار", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
int ID = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString());
SqlConnection con = new SqlConnection(Connection);
con.Open();
SqlCommand com = new SqlCommand("Delete From tuser Where uid=" + uid, con);

com.ExecuteNonQuery();

con.Close();
BindGrid();
}
}
}


بنده که کد مربوطه رو نوشتم براتون اشکال شما از این بوده که تکست باکس هاتون رو به دیتا گرید وصل کردید و همچین چیزی نمیشه . شما اگر می خواین تکست باکس هاتون مقادیر فیلد جدولتون رو بگیره باید تک تک اونارو به جدول وصل(Bind) کنید . و اگر نه فقط میخواین دیتاگرید مقادیر جدولتون رو نشون بده و از خوده همون دیتا گرید عملیات ویرایش و حذف رو انجام بدید اون کدی که قبلا نوشتم مشکلتون رو حل میکنه این کدی ام که مینویسم برای ویرایش هست قبلا هم عرض کردم من فقط روش کار رو بهتون میگم جزئیاتش با شما


sqlCommand a = new sqlCommand("update اسم جدول set n=@n where فیلد مربوطه=" + textBox2.Text, con);
a.Parameters.AddWithValue("@n", textBox1.Text);
a.ExecuteNonQuery();

توجه کنید اونجایی که نوشتم " فیلد مربوطه" میتونی فیلدی رو بنویسی که شرط ویرایش باشه مثلا شماره دانشجو ، که اگر درست بود فقط اطلاعات همون دانشجو رو برات ویرایش کنه نه کل دانشجوهارو . موفق باشی.

parseh21
جمعه 31 مرداد 1393, 21:22 عصر
بنده که کد مربوطه رو نوشتم براتون اشکال شما از این بوده که تکست باکس هاتون رو به دیتا گرید وصل کردید و همچین چیزی نمیشه . شما اگر می خواین تکست باکس هاتون مقادیر فیلد جدولتون رو بگیره باید تک تک اونارو به جدول وصل(Bind) کنید . و اگر نه فقط میخواین دیتاگرید مقادیر جدولتون رو نشون بده و از خوده همون دیتا گرید عملیات ویرایش و حذف رو انجام بدید اون کدی که قبلا نوشتم مشکلتون رو حل میکنه این کدی ام که مینویسم برای ویرایش هست قبلا هم عرض کردم من فقط روش کار رو بهتون میگم جزئیاتش با شما

بله شما درست می گویید من با یک دکمه به تکست باکس ها منتقل و اونجا ویرایش می کنم. که سرانجام مشکلم حل شد.
حالا باید setup نرم افزار رو بسازم ببینم مشکلی نداره.
باز هم از شما سپاسگذارم.