Несколько дней назад я искал в Интернете информацию по реализации этой функции, но не нашел нужных результатов. Наконец, я просто хочу найти способ ее реализации, я боюсь забыть, поэтому я. опубликуйте его для использования в будущем, а также для людей, которым нужна эта функция. Предложите несколько идей:
Общая идея такова: извлеките данные EXCEL в набор данных, вставьте данные основной таблицы через цикл, а затем вставьте данные из таблицы через цикл:
Код выглядит следующим образом:
частная пустота button1_Click (отправитель объекта, System.EventArgs e)
{
//выбираем файл
ofdSelectExcel.Filter = "Файлы Excel(*.xls)|*.xls";
ofdSelectExcel.RestoreDirectory = true;
if( ofdSelectExcel.ShowDialog() == DialogResult.OK)
{
если (ofdSelectExcel.FileName.Trim().Length == 0)
{
MessageBox.Show(this, «Сначала выберите файл Excel!»);
возвращаться;
}
еще
{
ImportExcelToSqlServer(ofdSelectExcel.FileName.Trim());
}
}
}
************************************************* *******
Извлечение данных
public void ImportExcelToSqlServer (строковое имя файла)
{
если (имя_файла == ноль)
{
throw new ArgumentNullException("Строка имени файла имеет значение NULL!");
}
if (имя_файла.Длина == 0)
{
throw new ArgumentException("Строка имени файла пуста!");
}
Строка oleDBConnString = String.Empty;
oleDBConnString = "Provider=Microsoft.Jet.OLEDB.4.0;";
oleDBConnString += "Источник данных=";
oleDBConnString += имя_файла;
oleDBConnString += ";Расширенные свойства=Excel 8.0;";
OleDbConnection oleDBConn = ноль;
OleDbDataAdapter oleAdMaster = null;
DataTable m_tableName=новый DataTable();;
DataSet ds = новый DataSet();
пытаться
{
oleDBConn = новый OleDbConnection (oleDBConnString);
олеDBConn.Открыть();
m_tableName = oleDBConn.GetOleDbSchemaTable (OleDbSchemaGuid.Tables, null);
if (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 = новый OleDbDataAdapter (sqlMaster, oleDBConn);
oleAdMaster.Fill(ds, «m_tableName»);
Менеджер MailRebateManager = новый MailRebateManager ();
bool isSucess=manger.AddExceLGmailRebate(ds.Tables["m_tableName"],ApplicationVariable.HomeCompanyID);
если (isSucess)
{
MessageBox.Show("Управление успехом!");
}
еще
{
MessageBox.Show("Манипулировать не удалось");
}
}
поймать (исключение ex)
{
MessageBox.Show(ex.Message);
SimpleLogger.Log(ex);
пытаться
{
}
поймать (OleDbException e)
{
SimpleLogger.Log(e);
MessageBox.Show("Исключение типа " + e.GetType() +");
}
}
}
*******************************************
Обработайте данные и вставьте их в основную и подчиненную таблицу соответственно.
public bool AddExceLGmailRebate (DataTable tb, строка homeCompanyID)
{
bool ret = ложь;
SqlConnection con = null;
Таблица DataTable = новый DataTable();
таблица = ТБ;
строка sConn = PublicManager.GetDBConnectionString(homeCompanyID);
con = новый SqlConnection ();
con.ConnectionString=sConn;
SqlTransaction тран=ноль;
SqlCommand com = null;
SqlCommand com = null;
пытаться
{
con.Открыть();
тран = con.BeginTransaction();
if (таблица!= null && table.Rows.Count > 0)
{
for(int i=1;i<table.Rows.Count;i++)
{
строка 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);
}
строка 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.Подстрока(0,50);
}
}
если (m_ItemDescription.Length>50)
{
m_ItemDescription=m_ItemDescription.Подстрока(0,50);
}
строка Begin = Convert.ToString(table.DefaultView[i][2]);
строка m_BeginPromoPeriodDate;
строка m_EndPromoPeriodEndDate;
если(начало=="")
{
продолжать;
}
еще
{
строка BeginTime=begin.Substring(0,8);
BeginTime=beginTime.Replace("/","-");
m_BeginPromoPeriodDate=beginTime;
строка endTime=begin.Substring(begin.Length-8);
endTime=endTime.Replace("/","-");
m_EndPromoPeriodEndDate=endTime;
}
строка 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);
}
строка m_TotalSoldStr=Convert.ToString(table.DefaultView[i][7]);
если (m_TotalSoldStr.Length > 4)
{
m_TotalSoldStr=m_TotalSoldStr.Substring(0,4);
}
интервал 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);
}
строка 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;
string 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 = новый SqlCommand (m_sqlMaster, con);
комм.Транзакция = тран;
com.ExecuteNonQuery ();
связь.Dispose();
}
for(int i=1;i<table.Rows.Count;i++)
{
строка m_PromoCode=Convert.ToString(table.Rows[i][0]);
если(m_PromoCode=="")
{
продолжать;
}
int m_PromoCodeTransactionID=GetMasterTransactionID(m_PromoCode,homeCompanyID);
строка 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=="")
{
ДатаВремя 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);
строка 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);
строка 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);
строка 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="INSERT INTO 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+"')";
ком = новый SqlCommand (m_sqlDetails, con);
com.CommandTimeout=60;
com.Transaction = тран;
com.ExecuteNonQuery();
ком.Dispose();
м++;
}
тран.Commit();
Рет = истина
}
}
поймать (исключение ex)
{
пытаться
{
тран.Откат();
}
поймать (SqlException е)
{
если (tran.Connection!= ноль)
{
MessageBox.Show("Исключение типа " + e.GetType() +");
}
}
MessageBox.Show("Ошибка при появлении номера строки:"+m.ToString());
MessageBox.Show("Сведения об ошибке:"+ex.Message);
SimpleLogger.Log(ex);
рет = ложь;
}
окончательно
{
con.Закрыть();
con.Dispose();
}
return ret
}
Источник: Колонка клуба Chengdu DotNet (ким)