منذ بضعة أيام، كنت أبحث عن معلومات على الإنترنت لتنفيذ هذه الوظيفة، لكنني لم أجد النتائج التي أريدها، وأخيرًا، أريد فقط أن أجد طريقة لتنفيذها، وأخشى أن أنساها انشرها لاستخدامها في المستقبل وأيضًا للأشخاص الذين يحتاجون إلى هذه الوظيفة. قدم بعض الأفكار:
الفكرة العامة هي: استخراج بيانات EXCEL إلى مجموعة البيانات، وإدراج بيانات الجدول الرئيسية من خلال الحلقة، ثم إدراج البيانات من الجدول من خلال الحلقة:
الرمز هو كما يلي:
زر الفراغ الخاص1_Click(مرسل الكائن، System.EventArgs e)
{
//اختر ملف
ofdSelectExcel.Filter = "ملفات Excel(*.xls)|*.xls";
ofdSelectExcel.RestoreDirectory = true;
إذا ( ofdSelectExcel.ShowDialog() == DialogResult.OK )
{
إذا (ofdSelectExcel.FileName.Trim().Length == 0)
{
messageBox.Show(this,"الرجاء تحديد ملف Excel أولاً!");
يعود؛
}
آخر
{
ImportExcelToSqlServer(ofdSelectExcel.FileName.Trim());
}
}
}
***************************************************** *******
استخراج البيانات
الفراغ العام ImportExcelToSqlServer (اسم ملف السلسلة)
{
إذا (اسم الملف == فارغ)
{
طرح ArgumentNullException الجديد("سلسلة اسم الملف فارغة!");
}
إذا (اسم الملف. الطول == 0)
{
طرح ArgumentException الجديد ("سلسلة اسم الملف فارغة!")؛
}
string oleDBConnString = String.Empty;
oleDBConnString = "Provider=Microsoft.Jet.OLEDB.4.0;";
oleDBConnString += "مصدر البيانات = ";
oleDBConnString += fileName;
oleDBConnString += ";الخصائص الموسعة=Excel 8.0;";
OleDbConnection oleDBConn = null;
OleDbDataAdapter oleAdMaster = null;
DataTable m_tableName=new DataTable();;
DataSet ds=new DataSet();
يحاول
{
oleDBConn = new OleDbConnection(oleDBConnString);
oleDBConn.Open();
m_tableName=oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
إذا (m_tableName != null && m_tableName.Rows.Count > 0)
{
m_tableName.TableName =m_tableName.Rows[0]["TABLE_NAME"].ToString()
}
سلسلة SQLMaster؛
sqlMaster=" SELECT * FROM ["+m_tableName+"]";
oleAdMaster=new OleDbDataAdapter(sqlMaster,oleDBConn);
oleAdMaster.Fill(ds,"m_tableName");
MailRebateManager manager=new MailRebateManager();
bool isSucess=manger.AddExceLGmailRebate(ds.Tables["m_tableName"],ApplicationVariable.HomeCompanyID);
إذا (النجاح)
{
messageBox.Show("التعامل مع النجاح!");
}
آخر
{
messageBox.Show("فشلت المعالجة");
}
}
قبض (استثناء على سبيل المثال)
{
messageBox.Show(ex.Message);
SimpleLogger.Log(ex);
يحاول
{
}
التقاط (OleDbException e)
{
SimpleLogger.Log(e);
messageBox.Show("استثناء من النوع" + e.GetType() +");
}
}
}
********************************************
قم بمعالجة البيانات وإدراجها في الجدول الرئيسي والجدول التابع على التوالي
المنطق العام AddExceLGmailRebate(DataTable tb,string homeCompanyID)
{
منطقية ret=false;
SqlConnection con=null;
جدول DataTable=جديد DataTable();
table=tb;
string sConn = PublicManager.GetDBConnectionString(homeCompanyID);
con=new SqlConnection();
con.ConnectionString=sConn;
SqlTransaction tran=null;
SqlCommand com=null;
SqlCommand com=null;
يحاول
{
con.Open();
tran = con.BeginTransaction();
إذا (الجدول != فارغ && table.Rows.Count > 0)
{
ل(int i=1;i<table.Rows.Count;i++)
{
string m_PromoCode=Convert.ToString(table.Rows[i][0]);
إذا (m_PromoCode = = "")
{
m_PromoCode=Convert.ToString(table.Rows[i-1][0]);
}
إذا (m_PromoCode.Length>50)
{
m_PromoCode=m_PromoCode.Substring(0,50);
}
string m_ItemDescription=Convert.ToString(table.DefaultView[i][1]);
إذا (m_ItemDescription.IndexOf("(")>0)
{
int num=m_ItemDescription.IndexOf("(");
m_ItemDescription=m_ItemDescription.Substring(0,num);
إذا (m_ItemDescription.Length>50)
{
m_ItemDescription=m_ItemDescription.Substring(0,50);
}
}
إذا (m_ItemDescription.Length>50)
{
m_ItemDescription=m_ItemDescription.Substring(0,50);
}
سلسلة تبدأ=Convert.ToString(table.DefaultView[i][2]);
سلسلة m_BeginPromoPeriodDate؛
سلسلة m_EndPromoPeriodEndDate؛
إذا (تبدأ = = "")
{
يكمل؛
}
آخر
{
سلسلة beginTime=begin.Substring(0,8);
beginTime=beginTime.Replace("/"،"-");
m_BeginPromoPeriodDate=beginTime;
string endTime=begin.Substring(begin.Length-8);
endTime=endTime.Replace("/"،"-")؛
m_EndPromoPeriodEndDate=endTime;
}
string m_RebateAmountStr=Convert.ToString(table.DefaultView[i][3]);
إذا (m_RebateAmountStr.Length >9)
{
m_RebateAmountStr=m_RebateAmountStr.Substring(0,9);
}
العشري m_RebateAmount؛
إذا (m_RebateAmountStr = = "")
{
m_RebateAmount=0;
}
آخر
{
m_RebateAmount= Convert.ToDecimal(m_RebateAmountStr);
}
string m_TotalSoldStr=Convert.ToString(table.DefaultView[i][7]);
إذا (m_TotalSoldStr.Length >4)
{
m_TotalSoldStr=m_TotalSoldStr.Substring(0,4);
}
int m_TotalSold;
إذا (m_TotalSoldStr = = "")
{
m_TotalSold=0;
}
آخر
{
m_TotalSold=Convert.ToInt32(m_TotalSoldStr);
}
string m_RebateReserveStr=Convert.ToString(table.DefaultView[i][8]);
إذا (m_RebateReserveStr.Length>9)
{
m_RebateReserveStr=m_RebateReserveStr.Substring(0,9);
}
العشري m_RebateReserve؛
إذا (m_RebateReserveStr = = "")
{
m_RebateReserve=0;
}
آخر
{
m_RebateReserve=Convert.ToDecimal(m_RebateReserveStr);
}
string m_RedeemedStr=Convert.ToString(table.DefaultView[i][17]);
إذا (m_RedeemedStr.Length >8)
{
m_RedeemedStr=m_RedeemedStr.Substring(0,8);
}
العشري m_Redeemed؛
إذا (m_RedeemedStr = = "")
{
m_Redeemed=0;
}
آخر
{
m_Redeemed=Convert.ToDecimal(m_RedeemedStr);
}
string m_PromoItem=Convert.ToString(table.DefaultView[i][23]);
إذا (m_PromoItem.Length >50)
{
m_PromoItem=m_PromoItem.Substring(0,50);
}
التاريخ والوقت m_InDate;
m_InDate=DateTime.Now;
سلسلة m_sqlMaster = "INSERT INTO act.dbo.Newegg_GMailRebate(PromoCode,PromoItem,RebateAmount,ItemDescription,BeginPromoPeriodDate,
EndPromoPeriodEndDate,PostMaskDate,TotalSold,RebateReserve,Redeemed,InDate)VALUES('"+m_PromoCode+"','"+m_PromoItem+"','"+m_RebateAmount+"',
'"+m_ItemDescription+"','"+m_BeginPromoPeriodDate+"','"+m_EndPromoPeriodEndDate+"',
'"+m_InDate+"','"+m_TotalSold+"','"+m_RebateReserve+"','"+m_Redeemed+"','"+m_InDate+"')";
comm=new SqlCommand(m_sqlMaster,con);
comm.Transaction =tran;
comm.ExecuteNonQuery ();
comm.Dispose();
}
ل(int i=1;i<table.Rows.Count;i++)
{
string m_PromoCode=Convert.ToString(table.Rows[i][0]);
إذا (m_PromoCode = = "")
{
يكمل؛
}
int m_PromoCodeTransactionID=GetMasterTransactionID(m_PromoCode,homeCompanyID);
string m_InvoiceNumber=Convert.ToString(table.Rows[i][4]);
إذا (m_InvoiceNumber.Length > 30)
{
m_InvoiceNumber=m_InvoiceNumber.Substring(0,30);
}
إذا (m_InvoiceNumber = = "")
{
m_InvoiceNumber = "0"؛
}
string m_InvoiceDate=Convert.ToString(table.DefaultView[i][6]);
إذا (m_InvoiceDate = = "")
{
DateTime m_InDate;
m_InDate=DateTime.Now;
m_InvoiceDate=Convert.ToString(m_InDate);
}
string m_serialNumberStr=Convert.ToString(table.Rows[i][5]);
إذا (m_serialNumberStr.Length >4)
{
m_serialNumberStr=m_serialNumberStr.Substring(0,4);
}
إذا (m_serialNumberStr = = "")
{
m_serialNumberStr="0";
}
int m_serialNumber=Convert.ToInt32(m_serialNumberStr);
string m_TotalValidStr=Convert.ToString( table.DefaultView[i][9]);
إذا (m_TotalValidStr.Length >4)
{
m_TotalValidStr=m_TotalValidStr.Substring(0,4);
}
إذا (m_TotalValidStr = = "")
{
m_TotalValidStr="0";
}
int m_TotalValid=Convert.ToInt32 (m_TotalValidStr);
string m_TotalInValidStr=Convert.ToString( table.DefaultView[i][10]);
إذا (m_TotalInValidStr.Length >4)
{
m_TotalInValidStr=m_TotalInValidStr.Substring(0,4);
}
إذا (m_TotalInValidStr = = "")
{
m_TotalInValidStr="0";
}
int m_TotalInValid=Convert.ToInt32(m_TotalInValidStr);
string m_ProcessFeeStr=Convert.ToString(table.DefaultView[i][13]);
إذا (m_ProcessFeeStr.Length >9)
{
m_ProcessFeeStr=m_ProcessFeeStr.Substring(0,9);
}
إذا (m_ProcessFeeStr = = "")
{
m_ProcessFeeStr="0";
}
العشري m_ProcessFee=Convert.ToDecimal(m_ProcessFeeStr);
string m_sqlDetails = "أدخل في act.dbo.Newegg_GMailExcelMaster(PromoCodeTransactionID,InvoiceNumber,InvoiceDate,SerialNumber,
TotalValid,TotalInvalid,ProcessFee)VALUES('"+m_PromoCodeTransactionID+"','"+m_InvoiceNumber+"','"+m_InvoiceDate+"',
'"+m_serialNumber+"','"+m_TotalValid+"','"+m_TotalInValid+"','"+m_ProcessFee+"')";
com=new SqlCommand(m_sqlDetails,con);
com.CommandTimeout=60;
com.Transaction =tran;
com.ExecuteNonQuery();
com.Dispose();
م++;
}
tran.Commit();
ret=true
}
}
قبض (استثناء على سبيل المثال)
{
يحاول
{
tran.Rollback();
}
قبض (SqlException ه)
{
إذا (tran.Connection ! = فارغة)
{
messageBox.Show("استثناء من النوع" + e.GetType() +");
}
}
messageBox.Show("حدث خطأ في رقم الصف:"+m.ToString());
messageBox.Show("تفاصيل الخطأ:"+ex.Message);
SimpleLogger.Log(ex);
ret=false;
}
أخيراً
{
con.Close();
con.Dispose();
}
return ret
}
المصدر: عمود Chengdu DotNet Club (كيم)