PDA

View Full Version : ارسال از EXCEL به SQL



akarsu
دوشنبه 20 بهمن 1393, 13:41 عصر
سلام دوستان
محبت کنید کمکم کنید
من یه برنامه میخوام بنویسم که با زدن یک دکمه در آن بتونم یک فایل exel انتخاب کنم ( مثلا : 2 ستونه . شماره دانشجویی - نام ) و بعد از انتخاب آن بیاد و کل اطلاعات جدول منو در sql پاک کنه و اون اطلاعات رو درون اون ذخیره کنه (که در این پایگاه داده هم دو فیلدی است .شماره دانشجویی - نام) و نمونه فایل exel ضمیمه کردم
من با اکسل اصلا کار نکردم و اگه برنامه کوچکی برام بدین که با اون شروع کنم ممنون میشم

و در Microsoft Visual Studio 2012 , exel 2013 کار میکنم در ویندوز 7 64bit

sajaaaaad
دوشنبه 20 بهمن 1393, 14:08 عصر
سلام منم این مشکل رو داشتم ولی هرکار کردم جواب نداد :ناراحت:
خیلی کدهای مختلف رو امتحان کردم، دوستان اگر می دونن بگن منم ممنون میشم.
آخرشم من رفتم از توی خود اسکیوال داده ها رو وارد کردم، یک گزینه import data داره که از اون میشه فایل اکسل رو وارد کرد و به عنوان یک جدول داخل دیتابیست اضافه کنی یا با نام جدید ذخیرش کنی.
اینم لینک پست من
http://barnamenevis.org/showthread.php?482353-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D9%81%D8%A7%DB%8C%D9%84-%D8%A7%DA%A9%D8%B3%D9%84-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%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-%DB%8C%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7-%D8%AA%DB%8C%D8%A8%D9%84-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3

توی پست خودم من تونستم فقط داده ها رو بخونم و توی یک دیتا گرید ویو نشون بدم ولی اینکه چطور پاسش بدم به اسکیوال موند :ناراحت:

akarsu
دوشنبه 20 بهمن 1393, 14:20 عصر
یکی راهنمای کنه خواهشن
نه من باید از داخل نرم افزار این کارو انجام بدم یعنی کاربر انجام بده چون مثلا 10 روز به 10 روز یه فایل میاد که باید جایگذین بشه
من زیاد گشتم اما پیدا نکردم
از شما هم ممنونم

محمد آشتیانی
دوشنبه 20 بهمن 1393, 17:08 عصر
سلام
یک نمونه برنامه آماده کردم ببینید

روال استفاده:
1- با کلیک روی دکمه "انتخاب فایل اکسل" یک فایل انتخاب کنید
2- از کمبو باکس "جدول های موجود" یک WorkSheet انتخاب کنید
3- با وارد کردن نام مورد نظر جدول Sql دکمه "تبدیل به اسکیوال" رو کلیک کنید
* جدول نباید از قبل در دیتابیس شما موجود باشه ، در غیر اینصورت کد برنامه رو مطابق نیاز خودتون تغییر بدید



نکاتی که باید بهشون توجه کنید
1- رفرنس Microsoft.Office.Interop.Excel رو حتما داخل پروژه خودتون اضافه کنید
2- کانکشن استرینگ Sql Server رو با توجه به سیستم خودتون اصلاح کنید
3- به جهت اینکه این برنامه یه مثال هست ، کانکشن استرینگ رو بصورت ثابت داخل کد نوشتم و اینکه کنترل خطاهای برنامه و اعتبار سنجی ها در حد نیاز همین برنامه انجام شده ، قطعا در پروژه های واقعی باید اصلاحاتی در کد انجام بدید.



موفق باشید

akarsu
دوشنبه 20 بهمن 1393, 20:26 عصر
واقعا ممنونم از محبتی که کردین من نگاه میکنم اگه مشکلی داشتم میپرسم

sajaaaaad
سه شنبه 21 بهمن 1393, 06:52 صبح
سلام مرسی فوق العاده بود. من تست کردم واقعا عالی بود ممنون.

ghasem110deh
سه شنبه 21 بهمن 1393, 12:08 عصر
جدول نباید از قبل در دیتابیس شما موجود باشه ، در غیر اینصورت کد برنامه رو مطابق نیاز خودتون تغییر بدید ...
موفق باشید

سلام و ممنون بابت کد !
الان من جدول رو از قبل دارم ... و اطلاعاتی هم توش هست ، باید به اطلاعاتی که از قبل وجود داره اضافه بشه :
چطور آخرین ID رو تشخیص بده که از ادامه اون شروع کنه ؟

اطلاعات (فیلدهای) جدول و اکسل یکسان هستن !

محمد آشتیانی
سه شنبه 21 بهمن 1393, 13:16 عصر
سلام
اگر اسم فیلد ها عینا در جدول شما موجود هست کافیه این قطعه از کد رو حذف کنید (ترتیب فیلدها هم مهمه)


//ساخت جدول مورد نظر در اسکیوال
query = "create table " + TableName + "(" + dt.Columns[0].ToString().Replace(" ", "_") + " varchar(200)";
for (int i = 1; i < TotalCols; i++)
{
string ActualField = dt.Columns[i].ToString();
string FinalField = ActualField.Replace(" ", "_");
query += "," + FinalField + " varchar(200)";
}
query += ")";
cmd.CommandText = query;
con.Open();
cmd.ExecuteNonQuery();
con.Close();



برای ID هم اگر مقدار خصوصیت Is Identity فیلد ID شما True باشه ، نیاز نیست خودتون کاری بکنید ، SqlServer بصورت خودکار به رکوردهای جدید ID اختصاص میده.


موفق باشید

ghasem110deh
سه شنبه 21 بهمن 1393, 14:52 عصر
بازم ممنون ...
از Identity استفاده نمیکنم ، ظاهرا وقتی یه فیلد رو (به هر دلیل) کاربر حذف میکنه ، ترتیب رو مجدد درست نمیکنه ؟
-----------
دارم انجامش میدم ، سوالی بود می پرسم .

ghasem110deh
چهارشنبه 22 بهمن 1393, 01:33 صبح
آقای آشتیانی بازم سلام ...
دقیقا به همون مشکل با Id خوردم (که اگه یه آیدی تکراری باشه خطا میده)
--------------
و اینکه متن فارسی رو بصورت علامت سوال (؟) ذخیره میکنه !
به این قسمت ربط داره :

System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");

--------------
در کل خیلی عالیه !
ممنون

محمد آشتیانی
چهارشنبه 22 بهمن 1393, 02:06 صبح
و اینکه متن فارسی رو بصورت علامت سوال (؟) ذخیره میکنه !
به این قسمت ربط داره :

System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");



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

داستان ذخیره علامت سوال یه داستان تکراریه که در صورت جستجو کردن خودت میتونستی رفعش کنی (قبل از value ها یه N باید بذاری) کد زیر رو نگاه کن


//کپی اطلاعات جدول انتخاب شده
query = string.Empty;
con.Open();
for (int ins = 0; ins < TotalRows; ins++)
{
query = "insert into " + TableName + " values(N'" + dt.Rows[ins][0];
for (int co = 1; co < TotalCols; co++)
{
query += "',N'" + dt.Rows[ins][co].ToString();
}
query += "')";
cmd.CommandText = query;
cmd.ExecuteNonQuery();



ببین کنترل کردن آیدی با توجه به اینکه is identity نیست به خودت بستگی داره ، برای مثال با کوئری زیر آخرین آیدی ثبت شده رو میگیری و بعلاوه یک میکنی و بقیه ماجرا ، چیزی مثل این:

//کپی اطلاعات جدول انتخاب شده
query = string.Empty;
con.Open();
for (int ins = 0; ins < TotalRows; ins++)
{
query = "insert into " + TableName + " values((SELECT Max(id) FROM " + TableName + ") + 1 , N'" + dt.Rows[ins][0];
for (int co = 1; co < TotalCols; co++)
{
query += "',N'" + dt.Rows[ins][co].ToString();
}
query += "')";
cmd.CommandText = query;
cmd.ExecuteNonQuery();
}
con.Close();



تو این کوئری من فرض کردم تو جدولت یه فیلد به اسم id داری و هربار تو کوئری نسبت به آخرین مقدارش یک واحد بیشتر میشه (همچنان به ترتیب فیلدها دقت کن!!!)

akarsu
جمعه 24 بهمن 1393, 15:18 عصر
این ارور میده به من دلیلش چیه ؟:(

محمد آشتیانی
جمعه 24 بهمن 1393, 18:18 عصر
سلام
شما Microsoft Access Database Engine 2010 Redistributable رو از لینک زیر دانلود و نصب کن، حل میشه
http://www.microsoft.com/en-gb/download/details.aspx?id=13255



موفق باشید

akarsu
شنبه 25 بهمن 1393, 08:50 صبح
ممنونم مهندس جان
اما حل نشد باز باز ارور میده

systam
جمعه 01 خرداد 1394, 23:28 عصر
سلام بر دوستان بزرگوارم
توی سایت هم جستجو کردم چیزی پیدا نکردم
این برنامه ای که ضمیمه کردم دوتا مشکل داره
131527
زمانی برنامه رو باز میکنه اطلاعات رو از یک فایل اکسل میخونه میریزه در داخل دیتا گرید
اولین مشکلش روی دکمه ذخیره اطلاعات کلیک میکنی میاد اطلاعات سطر به سطر گرید ویو در دیتا بیس ذخیره میکنه فقط سطر اول رو ذخیره میکنه و خطا میده
131529
و برنامه میندیم دوباره بازش میکنیم روال بالا رو انجام میدیم همین خطا رو میده ولی همه اطلاعات گرید ویو رو در بانک ذخیره مکینه ؟
و سوال دوم
چطوری چک کنم اطلاعات گریدویو تکراری دیگه ثبت نشه در دیتا بیس ؟
از بزرگوراران ممنون میشم راهنماییم کنید خیلی ها همچین مشکلی رو دارن
یا علی

ghasem110deh
جمعه 01 خرداد 1394, 23:49 عصر
سلام
واسه خوندن اکسل و ذخیره در دیتابیس ...

متدهای زیر رو ایجاد کنید :

int TotalSheets, TotalCols, TotalRows;

private void SelectExcelFile()
{
OpenFileDialog OFD = new OpenFileDialog();
Excel.Application ExApp = new Microsoft.Office.Interop.Excel.Application();
cboSheet.Items.Clear();
txtAddress.Text = string.Empty;
OFD.Filter = "Excel Files (*.xlsx)|*.xlsx|All Files(*.*)|*.*";
OFD.InitialDirectory = @"c:\";
OFD.FileName = "Select File";
OFD.Title = "Select excel file..";
if (OFD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
try
{
string exFile = OFD.FileName;
txtAddress.Text = exFile;
System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");
Excel.Workbook MyWorkbook = ExApp.Workbooks.Open(exFile, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
TotalSheets = MyWorkbook.Worksheets.Count;
foreach (Excel.Worksheet worksheet in MyWorkbook.Worksheets)
{
cboSheet.Items.Add(worksheet.Name);
}
MyWorkbook.Close(false, false, false);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}


private System.Data.DataTable GetData(string ExcelFile, string SheetName)
{
string constr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelFile + ";Extended Properties=Excel 12.0";
string olecmd = "select * from [" + SheetName + "$]";
OleDbConnection con = new OleDbConnection(constr);
OleDbCommand cmd = new OleDbCommand(olecmd, con);
OleDbDataAdapter da = new OleDbDataAdapter();
System.Data.DataTable dt = new System.Data.DataTable();
con.Open();
da.SelectCommand = cmd;
da.Fill(dt);
TotalCols = dt.Columns.Count;
TotalRows = dt.Rows.Count;
con.Close();
return dt;
}


private void ExportData(string TableName)
{
string query = null;
System.Data.DataTable dt = new System.Data.DataTable();
dt = GetData(txtAddress.Text, cboSheet.SelectedItem.ToString());
try
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=AnbarDB;Integrated Security=True");
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
query = string.Empty;
con.Open();
for (int ins = 0; ins < TotalRows; ins++)
{
query = "insert into " + TableName + " values(N'" + dt.Rows[ins][0];
for (int co = 1; co < TotalCols; co++)
{
query += "',N'" + dt.Rows[ins][co].ToString();
}
query += "')";
cmd.CommandText = query;
cmd.ExecuteNonQuery();
}
con.Close();
MessageBox.Show("انتقال رکورد ها از اکسل به دیتابیس با موفقیت انجام شد", "خواندن از اکسل", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
DGV();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "خطا :");
}
}

دکمه انتخاب فایل اکسل :

SelectExcelFile(); // انتخاب فایل اکسل

اینم دکمه درج در دیتابیس :

if ((txtAddress.Text != string.Empty) && (cboSheet.SelectedIndex != -1) && (نام جدول != string.Empty))
ExportData(txtTable.Text);

تکست باکس هم جهت نمایش مسیر فایل اکسل هستش و cboSheet یک کمبوباکسه (بدون آیتم) که شیت ها رو نمایش میده !

امیدوارم به کارت بیاد :)

systam
یک شنبه 17 خرداد 1394, 14:42 عصر
سلام
استاد اشتیانی دمت گرم ایول الله
اقا یک سوال


ذخیره علامت سوال یه داستان تکراریه که در صورت جستجو کردن خودت میتونستی رفعش کنی (قبل از value ها یه N باید بذاری) کد زیر رو نگاه کن
اون N چی کاری انجام میده ؟
اول من نذاشتمش رکورد های فارس رو علامت سوال میزاشت و اونها رو در کد نویسی اضافه کردم درست شد

محمد آشتیانی
یک شنبه 17 خرداد 1394, 14:52 عصر
سلام
اون N باعث میشه Sql Server رشته ها رو بصورت یونیکد Unicode ذخیره کنه.

raminsalemi
چهارشنبه 14 مرداد 1394, 10:40 صبح
ممنونم مهندس جان
اما حل نشد باز باز ارور میده

از لینک زیر 2007 Office System Driver: Data Connectivity Components را نصب بفرمایید حل می شود

http://www.microsoft.com/en-us/download/confirmation.aspx?id=23734

Imenam
دوشنبه 02 شهریور 1394, 00:09 صبح
من یه جدول به نام Component دارم با یه سری ستون که فایل اکسل هم همون ستون ها با همون ترتیب داخلش هست ولی وقتی میخوام اطلاعات اکسل رو داخل sql بریزم با پیغامی که عکسشا گذاشتم مواجه میشم.یکی از ستون هام هم ID هست که is identity برابر true هست.
شما میگید مشکل از کجاست؟؟134587

Imenam
دوشنبه 02 شهریور 1394, 00:52 صبح
من یه جدول به نام Component دارم با یه سری ستون که فایل اکسل هم همون ستون ها با همون ترتیب داخلش هست ولی وقتی میخوام اطلاعات اکسل رو داخل sql بریزم با پیغامی که عکسشا گذاشتم مواجه میشم.یکی از ستون هام هم ID هست که is identity برابر true هست.
شما میگید مشکل از کجاست؟؟134587



حل شد دوستان عزیز
تو اکسل ستون ID رو خالی گذاشتم درست شد.

علی‌رحیمی
جمعه 16 بهمن 1394, 16:48 عصر
با سلام و تشکر.
ولی این که Access Database Engine باید برای هر سیستم نصب بشه یا جزء فایل های نصبی قرار بگیره اصلا خوب نیست.

rozitir
چهارشنبه 05 اسفند 1394, 08:34 صبح
سلام دوستان
یک برنامه ای دارم که برای من که تاحالا اینطوری کار نکردم پیچیدست !!

برنامه برای دفتر داری یک مدرست
برنامه اینطوری هستش که اطلاعات دانش آموزان (نام و... ) رو یک فایل اکسل میخونه و به بانک باید ارسال کنش
در داخل بانک علاوه بر اون فیلد های اکسل یکسری فیلد دیگه وجود داره مثلا ریاضی و زبان و... که باید خالی بمونه

وقتی که دفتر خاست بتونه اون مقادیر رو داخل نرم افزار تعغیر بده و در آخر گزارش بگیره از بانک

حالا سوال
چطور اطلاعات فایل اکسل رو میتونم بفرستم به بانکم ؟؟؟؟(کاربر انخاب کنه و بفرسته)

ممنون

AmiN0012
چهارشنبه 05 اسفند 1394, 08:46 صبح
private void Btn_Browse_Click(object sender, EventArgs e)///roydad dokme entekhab file exel
{
try
{
OpenFileDialog openfiledialog1 = new OpenFileDialog();
openfiledialog1.Filter = @"Excel 2003 Files (*.xls)|*.xls|Excel 2007 Files (*.xlsx)|*.xlsx";
if (openfiledialog1.ShowDialog() == DialogResult.OK)
{
this.Txt_Path.Text = openfiledialog1.FileName;
loadFile();
}


}
catch { }
}
private void loadFile()//method
{
//try
//{
string PathConn = "";
if ( System.IO.Path.GetExtension(Txt_Path.Text)=="xls")
PathConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Txt_Path.Text +
";Extended Properties=\"Excel 8.0;HDR=YES;\";";
else
PathConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Txt_Path.Text +
";Extended Properties='Excel 12.0;HDR=YES;'";
OleDbConnection conn = new OleDbConnection(PathConn);
string Txt_Sheet = System.IO.Path.GetFileNameWithoutExtension(Txt_Pat h.Text);
OleDbDataAdapter My_da = new OleDbDataAdapter("select * from [" + Txt_Sheet + "$]", conn);
Dt = new DataTable();
My_da.Fill(Dt);

if (Dt.Columns.Count > 1)
{
DgvInfo.DataSource = Dt;
DataGridViewColumn Columnlast = DgvInfo.Columns[DgvInfo.Columns.Count - 1];
Columnlast.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
Lbl_Msg.Visible = false;
Grp_Info.Visible = true;

DgvInfo.Rows[0].Cells[DgvInfo.Columns.Count - 1].Selected = true;
DgvInfo.DefaultCellStyle.Font = new Font("B Nazanin", 11);
DgvInfo.ColumnHeadersDefaultCellStyle.Font = new Font("B Nazanin", 10);
DgvInfo.AlternatingRowsDefaultCellStyle.Font = new Font("B Nazanin", 11);
Cmb_Moshtari.Focus();
}
else
{
MessageBox.Show("این صفحه حاوی هیچ اطلاعاتی نمیباشد", "اخطار ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
}
//}
//catch
//{
// MessageBox.Show("خطا در بارگذاری اطلاعات رخ داده است", "اخطار ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
//}
}


//dar dokme darj dastor bank jahate darj ro benevis

csharpcollegian
چهارشنبه 05 اسفند 1394, 08:46 صبح
سلام،
اطلاعات فایل اکسل رو بیار توو یه دیتاگریدویو تا کاربر هر کدوم رو خواست انتخاب کنه
بعد اطلاعات انتخاب شده در دیتاگریدویو رو ببر به دیتابیس...

rozitir
چهارشنبه 05 اسفند 1394, 08:49 صبح
private void Btn_Browse_Click(object sender, EventArgs e)///roydad dokme entekhab file exel
{
try
{
OpenFileDialog openfiledialog1 = new OpenFileDialog();
openfiledialog1.Filter = @"Excel 2003 Files (*.xls)|*.xls|Excel 2007 Files (*.xlsx)|*.xlsx";
if (openfiledialog1.ShowDialog() == DialogResult.OK)
{
this.Txt_Path.Text = openfiledialog1.FileName;
loadFile();
}


}
catch { }
}
private void loadFile()//method
{
//try
//{
string PathConn = "";
if ( System.IO.Path.GetExtension(Txt_Path.Text)=="xls")
PathConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Txt_Path.Text +
";Extended Properties=\"Excel 8.0;HDR=YES;\";";
else
PathConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Txt_Path.Text +
";Extended Properties='Excel 12.0;HDR=YES;'";
OleDbConnection conn = new OleDbConnection(PathConn);
string Txt_Sheet = System.IO.Path.GetFileNameWithoutExtension(Txt_Pat h.Text);
OleDbDataAdapter My_da = new OleDbDataAdapter("select * from [" + Txt_Sheet + "$]", conn);
Dt = new DataTable();
My_da.Fill(Dt);

if (Dt.Columns.Count > 1)
{
DgvInfo.DataSource = Dt;
DataGridViewColumn Columnlast = DgvInfo.Columns[DgvInfo.Columns.Count - 1];
Columnlast.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
Lbl_Msg.Visible = false;
Grp_Info.Visible = true;

DgvInfo.Rows[0].Cells[DgvInfo.Columns.Count - 1].Selected = true;
DgvInfo.DefaultCellStyle.Font = new Font("B Nazanin", 11);
DgvInfo.ColumnHeadersDefaultCellStyle.Font = new Font("B Nazanin", 10);
DgvInfo.AlternatingRowsDefaultCellStyle.Font = new Font("B Nazanin", 11);
Cmb_Moshtari.Focus();
}
else
{
MessageBox.Show("این صفحه حاوی هیچ اطلاعاتی نمیباشد", "اخطار ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
}
//}
//catch
//{
// MessageBox.Show("خطا در بارگذاری اطلاعات رخ داده است", "اخطار ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
//}
}


//dar dokme darj dastor bank jahate darj ro benevis




میشه بگید این چیکار میکنه؟

AmiN0012
چهارشنبه 05 اسفند 1394, 08:50 صبح
اینم عکس
139265

اول بفرست به گرید بعد درج کن همه سلول های گرید رو تو بانک

اینم یک لینک خوب از youtube
https://www.youtube.com/watch?v=CfNMPDJVjPI

rozitir
چهارشنبه 05 اسفند 1394, 08:57 صبح
ممنون
درج کردم حالا چطوری اطلاعات بعد از سطر یک رو بصورت ستونی به بانکم بفرستم

AmiN0012
چهارشنبه 05 اسفند 1394, 09:00 صبح
باید با یه حلقه for تک تک سلول های هر سطرو درج کنی تا اخر


private void Btn_Save_Click(object sender, EventArgs e)
{
for (int i = 0; i < DgvInfo.RowCount-1; i++)
{
string Fac_Tarikh = DgvInfo.Rows[i].Cells[1].Value.ToString();
string Fac_sharh = DgvInfo.Rows[i].Cells[2].Value.ToString();
string Fac_NoeFactor = DgvInfo.Rows[i].Cells[3].Value.ToString().Trim();
string Fac_Tash1 = DgvInfo.Rows[i].Cells[4].Value.ToString();
long Fac_Number = long.Parse(DgvInfo.Rows[i].Cells[5].Value.ToString());
int Fac_Tedad = int.Parse(DgvInfo.Rows[i].Cells[6].Value.ToString());
long Fac_FiVahed = long.Parse(DgvInfo.Rows[i].Cells[7].Value.ToString());
long Fac_Bedehkar = long.Parse(DgvInfo.Rows[i].Cells[8].Value.ToString());
long Fac_Bestankar = long.Parse(DgvInfo.Rows[i].Cells[9].Value.ToString());
long Fac_Baghimande = long.Parse(DgvInfo.Rows[i].Cells[10].Value.ToString());
long Fac_Remaining = long.Parse(DgvInfo.Rows[i].Cells[9].Value.ToString());
string Fac_Tashkhis = DgvInfo.Rows[i].Cells[11].Value.ToString();
string Fac_Moshtari = Cmb_Moshtari.SelectedValue.ToString();
SqlCommand cmd = new SqlCommand("insert into FactorList (Fac_Tarikh,Fac_sharh,Fac_NoeFactor,Fac_Tash1,Fac_ Number,Fac_Tedad,Fac_FiVahed,Fac_Bedehkar,Fac_Best ankar,Fac_Baghimande,Fac_Tashkhis,Fac_Moshtari,Fac _Remaining) values (@Fac_Tarikh,@Fac_sharh,@Fac_NoeFactor,@Fac_Tash1, @Fac_Number,@Fac_Tedad,@Fac_FiVahed,@Fac_Bedehkar, @Fac_Bestankar,@Fac_Baghimande,@Fac_Tashkhis,@Fac_ Moshtari,@Fac_Remaining)", Mydb.conn);
cmd.Parameters.AddWithValue("@Fac_Tarikh", Fac_Tarikh);
cmd.Parameters.AddWithValue("@Fac_sharh", Fac_sharh);
cmd.Parameters.AddWithValue("@Fac_NoeFactor", Fac_NoeFactor);
cmd.Parameters.AddWithValue("@Fac_Tash1", Fac_Tash1);
cmd.Parameters.AddWithValue("@Fac_Number", Fac_Number);
cmd.Parameters.AddWithValue("@Fac_Tedad", Fac_Tedad);
cmd.Parameters.AddWithValue("@Fac_FiVahed", Fac_FiVahed);
cmd.Parameters.AddWithValue("@Fac_Bedehkar", Fac_Bedehkar);
cmd.Parameters.AddWithValue("@Fac_Bestankar", Fac_Bestankar);
cmd.Parameters.AddWithValue("@Fac_Baghimande", Fac_Baghimande);
cmd.Parameters.AddWithValue("@Fac_Tashkhis", Fac_Tashkhis);
cmd.Parameters.AddWithValue("@Fac_Moshtari", Fac_Moshtari);
cmd.Parameters.AddWithValue("@Fac_Remaining", Fac_Remaining);
cmd.ExecuteNonQuery();
}
Mydb.Close();
MessageBox.Show("اطلاعات با موفقیت ذخیره شد", "پیغام ", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
Form frm=new Frm_Calcute();
frm.ShowDialog();
}



فیلدهای من با شما متفاوته.این فقط یه مثاله که شما باید چطور بنویسید برنامتونو.در ضمن dgvinfo اسم دیتاگرید من هست

rozitir
چهارشنبه 05 اسفند 1394, 09:03 صبح
ممنون سلول عرضیه دیگه ؟؟
چون اگه سطر رو به پایین باشه که شاید بیشتر شد

AmiN0012
چهارشنبه 05 اسفند 1394, 09:43 صبح
بلع عرضیه.
هر ردیف گرید در یک ردیف بانک درج میشه

titrajh
شنبه 05 آبان 1397, 07:53 صبح
149149

سلام دوست عزیز
وقت بخیر ممنون از نمونه کدی که برای تبدیل اکسل به sql گزاشتین
منتهی من موقع استفاده با یه مشکل برخورد کردم اونم اینکه هر کاری میکنم این خطارو میده

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

MoslemMaleki
شنبه 21 اردیبهشت 1398, 01:35 صبح
با تشکر فراوان از آقای آشتیانی.
خطای دریافتی دستمون
titrajh (http://barnamenevis.org/member.php?149206-titrajh)
به احتمال زیاد استفاده از / کارکتر یا هرنوع کاراکتر اختصاصیه که با جایگیزی بخش insert از :



//کپی اطلاعات جدول انتخاب شده query = string.Empty; con.Open(); for (int ins = 0; ins < TotalRows; ins++) { query = "insert into " + TableName + " values('" + dt.Rows[ins][0]; for (int co = 1; co < TotalCols; co++) { query += "','" + dt.Rows[ins][co].ToString(); } query += "')";
cmd.CommandText = query; cmd.ExecuteNonQuery(); } con.Close();


به :



//کپی اطلاعات جدول انتخاب شده query = string.Empty; con.Open(); for (int ins = 0; ins < TotalRows; ins++) {
cmd.Parameters.Clear();
query = "insert into " + TableName + " values( @DT0 "; for (int co = 1; co < TotalCols; co++) { query += ", @DT" + co.ToString(); } query += ")";
cmd.CommandText = query;
cmd.Parameters.AddWithValue("@DT0", dt.Rows[ins][0].ToString());
for (int co = 1; co < TotalCols; co++) { cmd.Parameters.AddWithValue(("@DT" + co.ToString()), dt.Rows[ins][co].ToString()); }
cmd.ExecuteNonQuery(); } con.Close();


درست میشه