PDA

View Full Version : سوال: ذخیره DataGridView در دیتابیس .mdb



mohsen-01
چهارشنبه 21 اسفند 1392, 17:23 عصر
سلام.
خسته نباشید.
خواهش میکنم یکی کمکم کنه, من تقریبا چند ماه شرو کردم C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ یاد گرفتم , میخوام اطلاعات دیتاگرید رو تو دیتا بیس با پسوند .MDB ذخیره کنم ظاهرا jet database میگن .
ایشالا جبران میکنما :ناراحت: کمک کنین.

mohsen-01
چهارشنبه 21 اسفند 1392, 18:35 عصر
والا من یه فایل دارم که با پسونده .mdb هستش و ظاهرا اسم فرمتش jet database هست. میخوام اطلاعاتم رو به اون شکل در بیارم.

khokhan
چهارشنبه 21 اسفند 1392, 18:43 عصر
آقا کارم گیره. کمک :ناراحت:

.................................................. ............................


private void btn_insert_Click(object sender, EventArgs e)
{

for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
{

str = @"INSERT INTO student1(sid,sname,smarks,saddress) VALUES ('" + dataGridView1.Rows[i].Cells["sid"].Value + "', '" + dataGridView1.Rows[i].Cells["sname"].Value + "'," + dataGridView1.Rows[i].Cells["smarks"].Value + ",'" + dataGridView1.Rows[i].Cells["saddress"].Value + "');";
try
{
using (OleDbConnection con = new OleDbConnection(ConnectionString))
{
using (com = new OleDbCommand(str, con))
{
con.Open();
com.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

}
label1.Text = "Records inserted successfully";
}

mohsen-01
چهارشنبه 21 اسفند 1392, 19:03 عصر
.................................................. ............................


private void btn_insert_Click(object sender, EventArgs e)
{

for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
{

str = @"INSERT INTO student1(sid,sname,smarks,saddress) VALUES ('" + dataGridView1.Rows[i].Cells["sid"].Value + "', '" + dataGridView1.Rows[i].Cells["sname"].Value + "'," + dataGridView1.Rows[i].Cells["smarks"].Value + ",'" + dataGridView1.Rows[i].Cells["saddress"].Value + "');";
try
{
using (OleDbConnection con = new OleDbConnection(ConnectionString))
{
using (com = new OleDbCommand(str, con))
{
con.Open();
com.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

}
label1.Text = "Records inserted successfully";
}
ممنون از کمکتون .ببخشید میشه یکم واضح تر بگید؟ من میخوام تو یه فایل .mdb ذخیره بشه . من تازه واردم com که نوشتین نمیدونم چیه:افسرده:

Morteza-76
چهارشنبه 21 اسفند 1392, 20:20 عصر
شما جوابتون رو به صورت کامل از دوستانمون دریافت کردید حال اگر شما اطلاعات کافی ندارید چندین سرچ ساده را در سایت بکنید و سوالات خودتونو بپرسید.
در ضمن این کاری که دوستمون گفتند فرقی ندارد در تمامی فرمت های بانک اطلاعاتی اکسس ذخیره میشوند و com هم متغییری است از Oledb Command .

mohsen-01
چهارشنبه 21 اسفند 1392, 20:35 عصر
یعنی یه کمکم نمیتونین بکنین ؟ :)
من اگر کاری بتونم بکنم هیچوقت دریق نمیکنم . من فقط سه ماه خودم نشستم با ادیت کردن سورس تا اینجا یاد گرفتم. نه کتابی بوده نه کسی کمکم کرد. هروقت سوال داشتم هیچکس جواب نداد تا خودم پیدا کنم. خب این سوال که واستون انقد راحته چرا کمکم نمیکنید؟

Morteza-76
چهارشنبه 21 اسفند 1392, 20:54 عصر
من کد دوستتون رو براتون تحلیل میکنم تا متوجه بشین و یاد بگیرین شما دقیقا میخواهید که اطلاعات درون دیتا گرید وارد دیتا بیستون بشه برای این کا باید حلقه ی تکراری ایجاد کرد که هر بار سطر های دیتا گرید شما رو وارد که شامل اطلاعات است رو وارد بکنه درون دیتا بیس پس این حلقه تا count سطر هاتون یعنی تا آخرین سطر تون رو شامل بشه و چک کنه و دستوراتی که هر بار به یکی از سطر ها رسید آن سطر رو وارد دیتا بیس بکنه رو انجام بدید و حالا دستوراتی که نوشته شده این است که یک متغییر con معرفی شده که آدرس دیتا بیستون در اون قرار میگیره یعنی نقطه ی اتصال به دیتا بیستونه , در خط سوم متغییری از نوع string معرفی شده و دستوراتی که باید داده شود که در دیتا بیس صورت گیرد انجام شود درون متغییر com قرار میگیرند که یک دیتا کامند معرفی شده است که به دیتا بیس مورد نظرمون وصل است این دستور insert into یک رکورد جدید در دیتا بیس شما ذخیره میکنه که همون سیو شما محسوب میشه این دستور فیلد هایی که باید پر شوند برای رکورد جدید رو با مقدار اونها در دیتابیس ذخیره شوند رو شامل میشه که این مقدار هایی که باید درون فیلد هاتون در رکوردی که ایجاد میکنید در دیتا بیس قرار بگیرن همان اطلاعاتی هستند که در دیتا گرید وجود دارند یعنی ما وقتی که هر با با حلقه ی فور هر سطری رو در دیتا گرید چک میکنیم یعنی این که هر بار این حلقه سطر ها رو با دستور insert into درون رکورد دیتا بیس ما ذخیره میکنه تا زمانی که سطر های دیتا گرید ما به پایان برسد و در آخر هم با دستور com.ExecuteNonQuery() دیتا کامند ما که شامل دستور ذخیره است اجرا میشود این نحوه ی عملکرد این کد است و نیاز شما رو برطرف میکنه>.

mohsen-01
چهارشنبه 21 اسفند 1392, 21:16 عصر
خیلی ممنون از راهنمایی و توضیحاتتون. ممنونم. اما شرمنده ببخشید یعنی الان باید یک دیتا بیس اضافه کن به پروژه؟ SQL؟
ConnectionString چیه؟
بذارید واضح تر بگم.
من دو تا ربات دارم که هرکدوم این اعلاعات رو به یک روشی میخونه. اولی همونطور که گفتم اطلاعاطش در فایلی با پسوند .mdb ذخیره میشه و بار گذازی مجدد میشه. اما برنامه دیگه ام این اطلاعات رو به صورت یک فایل متنی ذخیره میکنه که در .txt میشه ذخیره کرد. کاری که برنامه من میخواد انجام بده اینه که این اطلاعات رو تبدیل کنه به هم. با فایل .txt که مشکلی ندام. برای خواندن .mdb از excel کمک گرفتم. اما برای ذخیره در .mdb مشکل دارم. درباره data base هم چیزی بلد نیستم. شرمنده. همیشه گفتن پرسیدن عیب نیست. عیب هم نیست چون این برنامه رو خیلیا نیاز دارن.

Morteza-76
چهارشنبه 21 اسفند 1392, 22:59 عصر
شما باید مبحث ado.net رو یاد بگیرید با این دو فیلم آموزشی مشکل شما حل می شود
Part 1
http://ehsanavr.com/wp-content/plugins/download-monitor/download.php?id=ado1.exe
Part 2
http://ehsanavr.com/wp-content/plugins/download-monitor/download.php?id=ado2.exe

mohsen-01
پنج شنبه 22 اسفند 1392, 00:08 صبح
فایل رمز داره

mohsen-01
پنج شنبه 22 اسفند 1392, 09:24 صبح
آقا این فایلتون رو حجمش با اینکه زیاده دانلود کردم اما رمز داره... تازه معلوم نیست بعدش کارم راه بیوفته یا نه. اصلا نمیدونم متوجه شدین من چی میخوام یا نه.

کسی نیست یه تیکه کد به من بده؟ خب مثلا شما بلدینا :ناراحت:

Morteza-76
پنج شنبه 22 اسفند 1392, 10:11 صبح
آقا این فایلتون رو حجمش با اینکه زیاده دانلود کردم اما رمز داره... تازه معلوم نیست بعدش کارم راه بیوفته یا نه. اصلا نمیدونم متوجه شدین من چی میخوام یا نه.

کسی نیست یه تیکه کد به من بده؟ خب مثلا شما بلدینا :ناراحت:

www.ehsanavr.com رمز فایل
مطمئن باشید همونی که شما میخواهید

mohsen-01
پنج شنبه 22 اسفند 1392, 15:09 عصر
سلام این کد Read این فایل هستو کد Write رو میتونید بگید؟ عکس لین عمل رو میخوام.

string strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Employees.mdb";
string strSql = "SELECT * FROM tbl_employees";
OleDbConnection con = new OleDbConnection(strProvider);
OleDbCommand cmd = new OleDbCommand(strSql, con);
con.Open();
cmd.CommandType = CommandType.Text;
OleDbDataReader dr = cmd.ExecuteReader();

int columnCount = dr.FieldCount;

for (int i = 0; i < columnCount; i++)
{
dgv.Columns.Add(dr.GetName(i).ToString(), dr.GetName(i).ToString());
}

string[] rowData = new string[columnCount];
while (dr.Read())
{
for (int k = 0; k < columnCount; k++)
{
if (dr.GetFieldType(k).ToString() =="System.Int32")
{
rowData[k] = dr.GetInt32(k).ToString();
}

if (dr.GetFieldType(k).ToString() == "System.String")
{
rowData[k] = dr.GetString(k);
}
}

dgv.Rows.Add(rowData);
}

Morteza-76
پنج شنبه 22 اسفند 1392, 15:56 عصر
یعنی شما میخواهید اطلاعات دیتا گرید شما با زدن کلید درون بانک اطلاعاتی تون بره دیگه درسته؟
دوستمون یکبار برای شما کدشو نوشتن .
private void btn_insert_Click(object sender, EventArgs e)
{

for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
{

str = @"INSERT INTO student1(sid,sname,smarks,saddress) VALUES ('" + dataGridView1.Rows[i].Cells["sid"].Value + "', '" + dataGridView1.Rows[i].Cells["sname"].Value + "'," + dataGridView1.Rows[i].Cells["smarks"].Value + ",'" + dataGridView1.Rows[i].Cells["saddress"].Value + "');";
try
{
using (OleDbConnection con = new OleDbConnection(ConnectionString))
{
using (com = new OleDbCommand(str, con))
{
con.Open();
com.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

}

label1.Text = "Records inserted successfully";
}

mohsen-01
پنج شنبه 22 اسفند 1392, 16:11 عصر
.................................................. ............................


private void btn_insert_Click(object sender, EventArgs e)
{

for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
{

str = @"INSERT INTO student1(sid,sname,smarks,saddress) VALUES ('" + dataGridView1.Rows[i].Cells["sid"].Value + "', '" + dataGridView1.Rows[i].Cells["sname"].Value + "'," + dataGridView1.Rows[i].Cells["smarks"].Value + ",'" + dataGridView1.Rows[i].Cells["saddress"].Value + "');";
try
{
using (OleDbConnection con = new OleDbConnection(ConnectionString))
{
using (com = new OleDbCommand(str, con))
{
con.Open();
com.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

}
label1.Text = "Records inserted successfully";
}

آقا پیدا کردم دمتون گرم. همین بود. فیکسش کردم . اما میخام یه جای دیگه ذخیره بشه, یعنی بعد از پردازش بهش آدرس بدم که کجا ذخیره کنه. آدرس دادن رو بلدم اما نمیدونم چجوری اول داخل سافت پردازش کنم بعد سیو کنم.

mohsen-01
پنج شنبه 22 اسفند 1392, 16:20 عصر
مشکلم این بود : ConnectionString
باپیدا کردن کد رید این رو فهمیدم که باید آدرس فایل رو داخل اون قرار بدم. خوب من اصلا اینو بلد نبودم. نمیدونستم jet database چیه که بخوام
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Employees.mdb" رو تایپ کنم.
از فیلم آموزشی هم ممنون. خیلی مفیده.

Morteza-76
پنج شنبه 22 اسفند 1392, 16:25 عصر
خواهش میکنم وظیفم بود کمکتون کنم خوشحالم که مشکلتون حل شد.

mohsen-01
پنج شنبه 22 اسفند 1392, 16:29 عصر
خواهش میکنم وظیفم بود کمکتون کنم خوشحالم که مشکلتون حل شد.

خیلی ممنون حالا جواب اینم میدین بی زحمت :لبخند:

اما میخام یه جای دیگه ذخیره بشه, یعنی بعد از پردازش بهش آدرس بدم که کجا ذخیره کنه. آدرس دادن رو بلدم اما نمیدونم چجوری اول داخل سافت پردازش کنم بعد سیو کنم.

Morteza-76
پنج شنبه 22 اسفند 1392, 16:33 عصر
آقا پیدا کردم دمتون گرم. همین بود. فیکسش کردم . اما میخام یه جای دیگه ذخیره بشه, یعنی بعد از پردازش بهش آدرس بدم که کجا ذخیره کنه. آدرس دادن رو بلدم اما نمیدونم چجوری اول داخل سافت پردازش کنم بعد سیو کنم.

میشه بیشتر توضیح بدید سوالتون نامقهومه

mohsen-01
پنج شنبه 22 اسفند 1392, 16:52 عصر
string data = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb";
OleDbCommand com;
string str;
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{

str = @"INSERT INTO Table1(clmn) VALUES ('" + dataGridView1.Rows[i].Cells["clmn"].Value + "');";
try
{
using (OleDbConnection con = new OleDbConnection(data))
{
using (com = new OleDbCommand(str, con))
{
con.Open();
com.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

}
label1.Text = "Records inserted successfully";

الان اطلاعات من رو data.mdb داره ذخیره میشه. اما نمیخوام مستقیم روی اون فایل بره. میخوام بعد از تبدیل اونها به دیتا بیس ازم بپرسه کجا ذخیره کنم. میخوام بعد از عمل پردازش فایل ذخیره بشه. امکان داره؟

Morteza-76
پنج شنبه 22 اسفند 1392, 17:03 عصر
منظور شما اینکه یک فایل دیتا بیس دیگه هم دارید و میخواهید که وقتی کلید ذخیره فشرده شد یک سوال پرسیده بشه که این اطلاعات دیتا گرید شما کجا ذخیره بشه خب شما یک ConnectionString دیگه معرفی کنید که به دیتا بیس دومتون وصل باشه و بعد سوالتونو از کاربر بپرسید اگر شرط برقرار بود با دیتا بیس اولی تون همین کدها اجرا بشه ولی اگر شرط برابر بود با دیتا بیس دومی تون همین کدها رو واسش بنویسید اما به ConnectionString دومتون متصل باشه

mohsen-01
پنج شنبه 22 اسفند 1392, 18:28 عصر
آقا یه مشکل. اینا EnCode ندارن؟
تو str = @"INSERT INTO Table1(clmn) VALUES ('" + dataGridView1.Rows[i].Cells["clmn"].Value + "');";
ممکنه مشکلی پیش بیاد. با چی باید کد بشن؟

Morteza-76
پنج شنبه 22 اسفند 1392, 18:39 عصر
درسته این دستورات به صورت یک رشته است اما این دستورات داخل کوئری دیتا بیس شما می رود یعنی با دستور com.ExecuteNonQuery این رشته ها درون کوئری دیتا بیس شما اجرا میشه یعنی وقتی به کوئزی فرستاده میشه دیگه رشته نیست بلکه کده و تغییرات رو در دیتا بیس رو اجرا میکنه.

mohsen-01
پنج شنبه 22 اسفند 1392, 18:52 عصر
آره درسته اما مشکل من اینجاست. قبل از اینکه بره به کوئری. داخل این استرینگ از ) ( ' , ; استفاده شده و اگر داخل جدول های من ازین حروف استفاده بشه با مشکل مواجه میشم. چند بارم برنامم ارور داد
str = @"INSERT INTO Table1(clmn) VALUES ('" + dataGridView1.Rows[i].Cells["clmn"].Value + "');";

Morteza-76
پنج شنبه 22 اسفند 1392, 18:57 عصر
نه مشکلی پیش نمیاد این ها فقط برای جدا سازی کاره

mohsen-01
پنج شنبه 22 اسفند 1392, 19:15 عصر
ببینید اگر در dataGridView1.Rows[i].Cells["clmn"].Value
من قرار بدم ',','
کد من میشه:
@"INSERT INTO Table1(clmn) VALUES ('',','');"

خو طبیعتا رباط من گیج باید بزنه الان :لبخند:

mohsen-01
پنج شنبه 22 اسفند 1392, 20:25 عصر
ببخشید کد ساخت این دیتا بیس رو بلدین؟ :لبخند: اینم نیاز دارم واسه ذخیره

khokhan
پنج شنبه 22 اسفند 1392, 20:43 عصر
ببخشید کد ساخت این دیتا بیس رو بلدین؟ :لبخند: اینم نیاز دارم واسه ذخیره
اگه منظورتون از ساخت دیتابیس اینه که از داخل برنامه خودتون یه فایل دیتابیس ایجاد کنین ..... ! اینطوریاست :
ابتدا کلاس ADOX رو به رفرنسهای برنامه تون اضافه می کنین این کلاس رو می تونین در مسیر C:\Program Files\Common Files\System\ado\msadox28.dll پیدا کنین
بعد می تونین با یه چند خط و با استفاده از این کلاس دیتابیس رو طراحی کنین و جداول و حتی اطلاعات پایه رو به اون اضافه کنین :
ابتدا معرفی کلاس

using ADOX;
using ADODB;
ودر ادامه :


public bool CreateNewAccessDatabase(string fileName)
{
bool result = false;

ADOX.Catalog cat = new ADOX.Catalog();
ADOX.Table table = new ADOX.Table();

//ساخت جدول و فیلدها
table.Name = "Table1";
table.Columns.Append("Field1");
table.Columns.Append("Field2");

try
{
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + "; Jet OLEDB:Engine Type=5");
cat.Tables.Append(table);

//بستن دیتابیس
ADODB.Connection con = cat.ActiveConnection as ADODB.Connection;
if (con != null)
con.Close();

result = true;
}
catch (Exception ex)
{
result = false;
}
cat = null;
return result;
}


:لبخند: شاد !شاد!