PDA

View Full Version : سوال: ایمپورت کردن از فایل Text و ذخیره در دیتابیس



winsent
پنج شنبه 08 دی 1390, 19:08 عصر
با سلام.
من مبتدی هستم و برای پروژه آخر ترم نیاز به تمرین زیر دارم. بی نهایت ممنون میشم دوستان لطف کنند و کامل راهنمایی کنند (کد قرار بدند).

- من یک دیتابیس با نام DB1.mdb دارم که با اکسس 2010 درست شده و دارای یک جدول با نام info و 4 المان id,name,city,age میباشد.
بر روی فرم میخوام دکمه ای قرار بدم برای اینکه بتونم باهاش فایلی با پسوند متنی (txt) رو باز کرده و در دیتابیس و جدولی که ساختم ایمپورت کنم. یعنی وقتی بر روی دکمه کلیک میکنم در نهایت (پس از دخیره محتویات در دیتابیس) پیغام "ایمپورت با موفقیت انجام گرفت" بر روی صفحه نمایش ظاهر بشه.
الان اومدم از یک دیتاگریدویو استفاده کردم و تونستم محتویات فایل متنی (که به صورت مشخص هر سطر اون توسط + از خط بعدی جدا شده) رو در دیتاگریدویو نمایش دادم.
حالا باید چطوری در دیتابیسی و جدولی که دارم اونها رو ذخیره کنم؟

برای درک بیشتر کدهای استفاده شده رو در زیر قرار میدم:


private void btn_read_file_Click(object sender, EventArgs e)
{
OpenFileDialog op = new OpenFileDialog();
op.Filter = "Text File (*.txt)|*.txt";
DialogResult dr;
dr = op.ShowDialog();
if (dr == DialogResult.OK)
{
StreamReader sr = new StreamReader(op.FileName);
string all = sr.ReadToEnd();
sr.Close();

DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Columns.Add("City");
dt.Columns.Add("Age");

string[] records = all.Split('+');

for (int i = 0; i < records.Length; i++)
{
string[] cells = records[i].Split(',');
dt.Rows.Add(cells[0], cells[1], cells[2], cells[3]);

}
dataGridView7.DataSource = dt;
}


در آخر بازهم از همه دوستان کمال تشکر رو دارم و درخواست میکنم هرچه سریعتر به بنده کمک کنید.
ممنونم...

gilas1368
پنج شنبه 08 دی 1390, 21:46 عصر
شما اول باید به دیتا بیستون متصل بشین بعد از اتصال با یه دستور Insert into می تونید اطلاعات رو داخل دیتابیس ذخیره کنین
اگه یه جستجو کنین تاپیکای زیادی پیدا می کنین

winsent
جمعه 09 دی 1390, 09:04 صبح
شما اول باید به دیتا بیستون متصل بشین بعد از اتصال با یه دستور Insert into می تونید اطلاعات رو داخل دیتابیس ذخیره کنین
اگه یه جستجو کنین تاپیکای زیادی پیدا می کنین

میشه لطف کنید و لینک یکی از این تاپیک هایی رو که فرمودید رو بدید که برای من تازه کار آسون و کامل باشه...؟!

gilas1368
جمعه 09 دی 1390, 12:10 عصر
فکر کنم این کارتو راه بندازه
http://barnamenevis.org/showthread.php?280554-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%AF%DB%8C%D8%AA%D8%A7-%DA%AF%D8%B1%DB%8C%D8%AF-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7-%D8%A8%DB%8C%D8%B3&highlight=%D8%B0%D8%AE%DB%8C%D8%B1%D9%87+%D8%AF%D8 %B1+%D8%AF%DB%8C%D8%AA%D8%A7+%D8%A8%DB%8C%D8%B3+%D 8%A7%DA%A9%D8%B3%D8%B3

winsent
یک شنبه 11 دی 1390, 16:45 عصر
فکر کنم این کارتو راه بندازه
http://barnamenevis.org/showthread.php?280554-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%AF%DB%8C%D8%AA%D8%A7-%DA%AF%D8%B1%DB%8C%D8%AF-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7-%D8%A8%DB%8C%D8%B3&highlight=%D8%B0%D8%AE%DB%8C%D8%B1%D9%87+%D8%AF%D8 %B1+%D8%AF%DB%8C%D8%AA%D8%A7+%D8%A8%DB%8C%D8%B3+%D 8%A7%DA%A9%D8%B3%D8%B3

به دردم نخورد مهندس
دیگه چیزی نداری؟

uniqueboy_ara
یک شنبه 11 دی 1390, 17:19 عصر
از این کد میتونی واسه ذخیره اطلاعات دیتا گرید داخل دیتابیس استفاده کنی ( البته باید با نوجه به پروژه خودت تغییرش بدی )

foreach (DataGridViewRow dgvr in dataGridView6.Rows)
{
string title = dgvr.Cells[1].Value.ToString();
string brand = dgvr.Cells[2].Value.ToString();
string model = dgvr.Cells[3].Value.ToString();
string pcs = dgvr.Cells[4].Value.ToString();
string price_single = dgvr.Cells[5].Value.ToString();
string price_totall = dgvr.Cells[6].Value.ToString();

sl.insertToSellLog(title, brand, model, pcs, price_single, price_totall, code, uName,txtShopperName.Text);
}

winsent
دوشنبه 12 دی 1390, 09:13 صبح
از این کد میتونی واسه ذخیره اطلاعات دیتا گرید داخل دیتابیس استفاده کنی ( البته باید با نوجه به پروژه خودت تغییرش بدی )

foreach (DataGridViewRow dgvr in dataGridView6.Rows)
{
string title = dgvr.Cells[1].Value.ToString();
string brand = dgvr.Cells[2].Value.ToString();
string model = dgvr.Cells[3].Value.ToString();
string pcs = dgvr.Cells[4].Value.ToString();
string price_single = dgvr.Cells[5].Value.ToString();
string price_totall = dgvr.Cells[6].Value.ToString();

sl.insertToSellLog(title, brand, model, pcs, price_single, price_totall, code, uName,txtShopperName.Text);
}

با تشکر
فقط بفرمایید dgvr و sl چی هستند...؟!

elena2007
دوشنبه 12 دی 1390, 11:24 صبح
سلام دوست عزیز ...
این کارت راه می ندازه
واسه تمامی فرمت ها هم تست شده هستش :
//*************save in db*******************
SqlConnection con =new SqlConnection("Data Source=GOONASH;Initial Catalog=db1;Integrated Security=True");
SqlCommand cmd =new SqlCommand("INSERT INTO t1 (bin) VALUES(@binfile)", con);
FileStream fs = new FileStream(filePath + "\\" + fileName, FileMode.Open, FileAccess.Read);
byte[] bf = new byte[fs.Length];
fs.Read(bf, 0, (int)fs.Length);
cmd.Parameters.AddWithValue("binfile", bf);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
fs.Close();
//*********************************


//******************read from db ****************
SqlConnection con = new
SqlConnection("Data Source=GOONASH;Initial Catalog=db1;Integrated Security=True");
SqlCommand cmd = new
SqlCommand("SELECT bin FROM t1 WHERE id=3", con);
FileStream fs = new
FileStream("c:\\11.xls", FileMode.Create, FileAccess.Write);

con.Open();
byte[] bf = (byte[])cmd.ExecuteScalar();

fs.Write(bf, 0, bf.Length);

System.Diagnostics.Process.Start("c:\\11.xls");

con.Close();
fs.Close();

استرینگ رو بر اساس سیستم خودت عوض کن ...
موفق باشی

uniqueboy_ara
دوشنبه 12 دی 1390, 16:41 عصر
dgvr یه نمونه از کلاس DataGridViewRow هست و SL هم نام کلاسیه که من خودم برای قسمت SellLog برنامم نوشته بودم!

winsent
سه شنبه 13 دی 1390, 00:03 صبح
[QUOTE=elena2007;1409266]سلام دوست عزیز ...
این کارت راه می ندازه
واسه تمامی فرمت ها هم تست شده هستش :
//*************save in db*******************
SqlConnection con =new SqlConnection("Data Source=GOONASH;Initial Catalog=db1;Integrated Security=True");
SqlCommand cmd =new SqlCommand("INSERT INTO t1 (bin) VALUES(@binfile)", con);
FileStream fs = new FileStream(filePath + "\\" + fileName, FileMode.Open, FileAccess.Read);
byte[] bf = new byte[fs.Length];
fs.Read(bf, 0, (int)fs.Length);
cmd.Parameters.AddWithValue("binfile", bf);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
fs.Close();
//*********************************


با سپاس بی کران از شما
من کد رو بر اساس دانش خودم تغییر دادم, ببینید درسته یا نه؟
فقط اون جایی که نوشتید binfile چی بنویسم؟

SqlConnection con = new SqlConnection("Data Source=|DataDirectory|\\bin\\Debug\\db1.mdb';Initi al Catalog=db1;Integrated Security=True");
SqlCommand cmd = new SqlCommand("INSERT INTO [mydb]([ID],[first_name],[city],[age]) values('{0}','{1}','{2}','{3}')", con);
FileStream fs = new FileStream("D:\\myfile.txt", FileMode.Open, FileAccess.Read);
byte[] bf = new byte[fs.Length];
fs.Read(bf, 0, (int)fs.Length);
cmd.Parameters.AddWithValue("binfile", bf);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
fs.Close();

elena2007
سه شنبه 13 دی 1390, 09:05 صبح
دوست عزیز به تعداد فیلد های جدولت دستور زیر رو تکرار کن :
cmd.Parameters.AddWithValue("binfile", bf);
binfile اسم دلخواه هستش که شما نوشتین 0و1و2و3

elena2007
سه شنبه 13 دی 1390, 09:22 صبح
این یه مثال واسه جدول t1 با دو تا فیلد bin,name
bin از نوع varbinary(MAX
name از نوع nvarchar

string filePath = "C:";
string fileName = "1.pdf";
SqlConnection con = new SqlConnection("Data Source=GOONASH;Initial Catalog=db1;Integrated Security=True");
SqlCommand cmd = new SqlCommand("INSERT INTO t1 (bin,name) VALUES(@binfile,@name)", con);
FileStream fs = new FileStream(filePath + "\\" + fileName, FileMode.Open, FileAccess.Read);
byte[] bf = new byte[fs.Length];
fs.Read(bf, 0, (int)fs.Length);
cmd.Parameters.AddWithValue("binfile", bf);
cmd.Parameters.AddWithValue("name", fileName);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
fs.Close();

اگه متوجه نشدین بگین یه برنامه براتو.ن بذارم ...
موفق باشین

winsent
سه شنبه 13 دی 1390, 17:16 عصر
این یه مثال واسه جدول t1 با دو تا فیلد bin,name
bin از نوع varbinary(MAX
name از نوع nvarchar

string filePath = "C:";
string fileName = "1.pdf";
SqlConnection con = new SqlConnection("Data Source=GOONASH;Initial Catalog=db1;Integrated Security=True");
SqlCommand cmd = new SqlCommand("INSERT INTO t1 (bin,name) VALUES(@binfile,@name)", con);
FileStream fs = new FileStream(filePath + "\\" + fileName, FileMode.Open, FileAccess.Read);
byte[] bf = new byte[fs.Length];
fs.Read(bf, 0, (int)fs.Length);
cmd.Parameters.AddWithValue("binfile", bf);
cmd.Parameters.AddWithValue("name", fileName);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
fs.Close();

اگه متوجه نشدین بگین یه برنامه براتو.ن بذارم ...
موفق باشین

بسیار تشکر و سپاس ویژه؛
لطف میکنید همین برنامه رو برای مثال من که در زیر میارم بنویسید (به زبان سی شارپ)
- یک دیتاگیرید با نام dataGridView1
- یک دکمه با نام btn_read برای خواندن محتویات فایل متنی (txt) و نشان دادن محتویات در دیتاگرید
- یک دکمه با نام btn_write برای ذخیره محتویات فایل متنی (txt) در دیتابیس با نام mytable که با ما مایکروسافت اکسس 2010 درست شده و دارای جدولی با نام table1 و فیلدهایی با عناوین ID,name,city,age هستش

در زیر کد دکمه btn_read که برای نمایش محتویات فایل متنی در دیتاگرید هستش رو براتون میذارم (به درستی کار میکنه):
private void btn_read_Click(object sender, EventArgs e)
{
OpenFileDialog op = new OpenFileDialog();
op.Filter = "Text File (*.txt)|*.txt";
DialogResult dr;
dr = op.ShowDialog();
if (dr == DialogResult.OK)
{
StreamReader sr = new StreamReader(op.FileName);
string all = sr.ReadToEnd();
sr.Close();

DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Columns.Add("City");
dt.Columns.Add("Age");

string[] records = all.Split('+');

for (int i = 0; i < records.Length; i++)
{
string[] cells = records[i].Split(',');
dt.Rows.Add(cells[0], cells[1], cells[2], cells[3]);

}
dataGridView1.DataSource = dt;
}
}

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

NasimBamdad
سه شنبه 13 دی 1390, 18:00 عصر
از IMPORT , EXPORT خود Managment Studio استفاده کن

elena2007
چهارشنبه 14 دی 1390, 10:57 صبح
سلام . همون طور که بچه ها هم گفتن بهته از ایمپورت و ایکسپورت استفاده کنین .
با این حال ، من کد شما رو نوشتم :

OleDbConnection con = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Environment.CurrentDirectory + "\\mytable.mdb");
OleDbCommand cmd = new OleDbCommand("INSERT INTO table1 (ID,name,city,age) VALUES(@ID,@name,@city,@age)", con);
OleDbDataAdapter da = new OleDbDataAdapter();
DataSet ds = new DataSet();

for (int i = 0; i < dataGridView2.RowCount; i++)
{
con.Open();
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@ID",dataGridView2[0, i].Value.ToString());
cmd.Parameters.AddWithValue("@Name", dataGridView2[1, i].Value.ToString());
cmd.Parameters.AddWithValue("@City",dataGridView2[2, i].Value.ToString());
cmd.Parameters.AddWithValue("@Age",dataGridView2[3, i].Value.ToString());
// cmd.CommandText = "insert into table1 (ID,name,city,age) values(@ID,@name,@city,@age)";

cmd.ExecuteNonQuery();
con.Close();

}
موفق باشین

winsent
چهارشنبه 14 دی 1390, 17:19 عصر
سلام . همون طور که بچه ها هم گفتن بهته از ایمپورت و ایکسپورت استفاده کنین .
با این حال ، من کد شما رو نوشتم :

OleDbConnection con = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Environment.CurrentDirectory + "\\mytable.mdb");
OleDbCommand cmd = new OleDbCommand("INSERT INTO table1 (ID,name,city,age) VALUES(@ID,@name,@city,@age)", con);
OleDbDataAdapter da = new OleDbDataAdapter();
DataSet ds = new DataSet();

for (int i = 0; i < dataGridView2.RowCount; i++)
{
con.Open();
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@ID",dataGridView2[0, i].Value.ToString());
cmd.Parameters.AddWithValue("@Name", dataGridView2[1, i].Value.ToString());
cmd.Parameters.AddWithValue("@City",dataGridView2[2, i].Value.ToString());
cmd.Parameters.AddWithValue("@Age",dataGridView2[3, i].Value.ToString());
// cmd.CommandText = "insert into table1 (ID,name,city,age) values(@ID,@name,@city,@age)";

cmd.ExecuteNonQuery();
con.Close();

}
موفق باشین

با تشکر؛
در هنگام اجرای برنامه با پیغام خطا زیر روبرو میشم:
The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine

winsent
جمعه 16 دی 1390, 00:29 صبح
The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine

Esmail Solhkhah
جمعه 16 دی 1390, 01:19 صبح
Provider مذکور یا رو سیستم نیست یا مورد پیدا کرده.

این لینک (http://support.microsoft.com/kb/239114/en-us) رو ببینید.

موفق باشید.