PDA

View Full Version : سوال: درج (Insert) داده در جدول با C#



mehran63
دوشنبه 31 خرداد 1395, 18:16 عصر
سلام
از C#‎‎‎ تو VS2010 و بانک Sqlexpress استفاده میکنم
با کد زیر داده رو میخوام به جدول مربوطه در بانکم اضافه کنم. دستور هیچ خطایی نمیگیره، ولی هیچ داده ای هم به بانک اضافه نمیکنه

private void btnbuildregister_Click_1(object sender, EventArgs e) {


SqlConnection objConnection = new SqlConnection();
string str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\ord-95.mdf;Integrated Security=True;User Instance=True";
objConnection.ConnectionString = str;


//SqlConnection("Data Source=.\\SQLEXPRESS; AttachDbFilename=" + Application.StartupPath + "\\ord-95.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True");

SqlCommand objCommand = new SqlCommand();
objCommand.Connection = objConnection;




objCommand.CommandText = @"insert into [build] " +
"(buildname) " +
"VALUES(@buildname)";


objCommand.Parameters.AddWithValue("@buildname", txtbuild.Text);


objConnection.Open();
objCommand.ExecuteNonQuery();
objConnection.Close();


MessageBox.Show("ثبت با موفقیت انجام شد", "پیغام",
MessageBoxButtons.OK, MessageBoxIcon.Information);


lblbuild.Hide();
txtbuild.Hide();
txtbuild.Text = "";
btnbuildregister.Hide();


}

جالب اینجاست که وقتی با کد زیر جدول رو تو datagrideview نگاه میکنم داده ای که اضافه کردم رو نشون میده ولی اینم تا وقتی هست که از برنامه بیرون نیومده باشم.
private void showTabla_Load(object sender, EventArgs e) {


SqlConnection con = new SqlConnection();
string str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\ord-95.mdf;Integrated Security=True;User Instance=True";


//string str = "Data Source=.\\SQLEXPRESS; AttachDbFilename=" + Application.StartupPath + "\\ord-95.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True";
// connection for Backup


con.ConnectionString = str;


SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from seller";


SqlDataAdapter da = new SqlDataAdapter(cmd);






//SqlDataReader dr = cmd.ExecuteReader();

DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;


dataGridView1.Columns[0].HeaderCell.Value = "Created";

}

csharpdoost
دوشنبه 31 خرداد 1395, 19:56 عصر
با سلام
شما در جدول Build درج میکنی ولی چرا از جدول seller فراخوانی میکنیش؟
جهت اطمینان اسم جدولت( Build ) رو تغییر بده. اگر اشتباه نکنم از کلمات کلیدی sql هستش.

mrprestige
دوشنبه 31 خرداد 1395, 21:00 عصر
سلام
از C#‎‎‎‎ تو VS2010 و بانک Sqlexpress استفاده میکنم
با کد زیر داده رو میخوام به جدول مربوطه در بانکم اضافه کنم. دستور هیچ خطایی نمیگیره، ولی هیچ داده ای هم به بانک اضافه نمیکنه

private void btnbuildregister_Click_1(object sender, EventArgs e) {


SqlConnection objConnection = new SqlConnection();
string str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\ord-95.mdf;Integrated Security=True;User Instance=True";
objConnection.ConnectionString = str;


//SqlConnection("Data Source=.\\SQLEXPRESS; AttachDbFilename=" + Application.StartupPath + "\\ord-95.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True");

SqlCommand objCommand = new SqlCommand();
objCommand.Connection = objConnection;




objCommand.CommandText = @"insert into [build] " +
"(buildname) " +
"VALUES(@buildname)";


objCommand.Parameters.AddWithValue("@buildname", txtbuild.Text);


objConnection.Open();
objCommand.ExecuteNonQuery();
objConnection.Close();


MessageBox.Show("ثبت با موفقیت انجام شد", "پیغام",
MessageBoxButtons.OK, MessageBoxIcon.Information);


lblbuild.Hide();
txtbuild.Hide();
txtbuild.Text = "";
btnbuildregister.Hide();


}

جالب اینجاست که وقتی با کد زیر جدول رو تو datagrideview نگاه میکنم داده ای که اضافه کردم رو نشون میده ولی اینم تا وقتی هست که از برنامه بیرون نیومده باشم.
private void showTabla_Load(object sender, EventArgs e) {


SqlConnection con = new SqlConnection();
string str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\ord-95.mdf;Integrated Security=True;User Instance=True";


//string str = "Data Source=.\\SQLEXPRESS; AttachDbFilename=" + Application.StartupPath + "\\ord-95.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True";
// connection for Backup


con.ConnectionString = str;


SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from seller";


SqlDataAdapter da = new SqlDataAdapter(cmd);






//SqlDataReader dr = cmd.ExecuteReader();

DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;


dataGridView1.Columns[0].HeaderCell.Value = "Created";

}

سلام دوست من این اتفاق زمانی میوفته که شما در متن Connection String تون از عبارت " |DataDirectory| " استفاده میکنید این به این معنی هست زمانی که عمل Debug در محیط Visual Studio انجام میشه شما پایگاه داده خودتون رو با داخل پوشه bin=>Debug قرار دادید و وقتی شما برنامه تون رو اجرا میکنید و عمل insert رو انجام میدید برنامه با خطا مواجه نمیشه ولی دستور ثبت هم اجرا نمیشه . برای رفع این مسئله Connection String تون و در پنجره Server Explorer که در اون دیتابیس تون قرار داره انتخاب کنید ب همینطور روی دیتابیس کلیک کنید و توی properties گزینه Copy To Output Directory رو یا روی Copy if newer و یا Do not Copy قرار بدید این موارد رو برطرف کنید ، به امید خدا مشکل حل میشه .
پیروز و موفق باشید.

Mahmoud.Afrad
سه شنبه 01 تیر 1395, 01:34 صبح
mrprestige (http://barnamenevis.org/member.php?338119-mrprestige) اشتباه نکنید، داده ثبت میشه اما در هر بار دیباگ یک کپی از دیتابیس خام جایگزین خواهد شد.

http://barnamenevis.org/showthread.php?455322-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D9%86%D8%B4%D8%AF%D9%86-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3
http://barnamenevis.org/showthread.php?356048-%D8%A8%DB%8C-%D8%AB%D8%A8%D8%A7%D8%AA%DB%8C-Database-%D8%8C-%D8%AD%D8%B0%D9%81-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-Database-%D8%AF%D8%B1-%D9%87%D8%B1-%D8%A8%D8%A7%D8%B1-Debug-%D8%8C-%DA%A9%D9%BE%DB%8C-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%AE%D8%A7%D9%85-%D8%AF%D8%B1-%D9%87%D8%B1-%D8%A8%D8%A7%D8%B1-Debug

mrprestige
سه شنبه 01 تیر 1395, 17:05 عصر
mrprestige (http://barnamenevis.org/member.php?338119-mrprestige) اشتباه نکنید، داده ثبت میشه اما در هر بار دیباگ یک کپی از دیتابیس خام جایگزین خواهد شد.

http://barnamenevis.org/showthread.php?455322-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D9%86%D8%B4%D8%AF%D9%86-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3
http://barnamenevis.org/showthread.php?356048-%D8%A8%DB%8C-%D8%AB%D8%A8%D8%A7%D8%AA%DB%8C-Database-%D8%8C-%D8%AD%D8%B0%D9%81-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-Database-%D8%AF%D8%B1-%D9%87%D8%B1-%D8%A8%D8%A7%D8%B1-Debug-%D8%8C-%DA%A9%D9%BE%DB%8C-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%AE%D8%A7%D9%85-%D8%AF%D8%B1-%D9%87%D8%B1-%D8%A8%D8%A7%D8%B1-Debug
با عرض سلام و ادب خدمت استاد عزیز جناب Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud-Afrad) ، خب بنده هم عرض کردم باید Copy if newer رو فعال کنن . یعنی اشتباه عرض کردم؟؟

daffy_duck376
سه شنبه 01 تیر 1395, 18:07 عصر
دوست عزیز چون برنامه تو تو مرحله دیباگ اجرا میشه تو هر بار اجرا بانک مورد استفاده از بین میره و با نسخه اورجینال جایگزین میشه بعد از پابلش برنامه این مشکل از بین میره . در ضمن میتونی بانکت رو تو اس کی یو ال بزاری و کانکشن رو به اس کی یو ال بزنی نه اینکه بانک رو تو هر بار اجرا اتچ کنی . اون موقع اطلاعات میمونه

محمد آشتیانی
سه شنبه 01 تیر 1395, 18:21 عصر
با عرض سلام و ادب خدمت استاد عزیز جناب Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud-Afrad) ، خب بنده هم عرض کردم باید Copy if newer رو فعال کنن . یعنی اشتباه عرض کردم؟؟


سلام
این بخش رو درست فرمودید ، اما اینکه گفتید دستور ثبت هم اجرا نمیشه ، غلطه
همه چیز تمام و کمال اجرا میشه ، فقط با هر بار بیلد دیتابیس خام جایگزین میشه طبق فرمایش آقای افراد.



موفق باشید.

mehran63
چهارشنبه 02 تیر 1395, 20:06 عصر
دوست عزیز چون برنامه تو تو مرحله دیباگ اجرا میشه تو هر بار اجرا بانک مورد استفاده از بین میره و با نسخه اورجینال جایگزین میشه بعد از پابلش برنامه این مشکل از بین میره . در ضمن میتونی بانکت رو تو اس کی یو ال بزاری و کانکشن رو به اس کی یو ال بزنی نه اینکه بانک رو تو هر بار اجرا اتچ کنی . اون موقع اطلاعات میمونه

تو SQL برای این نزاشتم که وقتی فایل setup رو وقتی به مشتری تحویل دادم خودش به راحتی بتونه نصبش کنه و نیاز نباشه SQL نصب کنه.
راهی هست که فقط بار اول که Setup رو اجرا کردی بانک Attach بشه؟

daffy_duck376
پنج شنبه 03 تیر 1395, 08:24 صبح
تو SQL برای این نزاشتم که وقتی فایل setup رو وقتی به مشتری تحویل دادم خودش به راحتی بتونه نصبش کنه و نیاز نباشه SQL نصب کنه.
راهی هست که فقط بار اول که Setup رو اجرا کردی بانک Attach بشه؟
شما بانکت رو به صورت اسکریپت در بیار با انستال شیلد setup کن . خود install sheld هم Sql رو نصب میکنه هم بانکت رو