Hace unos días estuve buscando información en Internet para implementar esta función, pero no encontré los resultados que quiero. Finalmente, solo quiero encontrar una manera de implementarla, tengo miedo de olvidarlo. publíquelo para uso futuro y también para las personas que necesitan esta función. Proporcione algunas ideas:
La idea general es: extraer los datos EXCEL en el conjunto de datos, insertar los datos de la tabla principal a través del bucle y luego insertar los datos de la tabla a través del bucle:
El código es el siguiente:
botón de anulación privado1_Click (remitente del objeto, System.EventArgs e)
{
//seleccionar archivo
ofdSelectExcel.Filter = "Archivos Excel(*.xls)|*.xls";
ofdSelectExcel.RestoreDirectory = verdadero;
si (ofdSelectExcel.ShowDialog() == DialogResult.OK)
{
si (ofdSelectExcel.FileName.Trim().Longitud == 0)
{
MessageBox.Show(this,"¡Primero seleccione un archivo de Excel!");
devolver;
}
demás
{
ImportExcelToSqlServer(ofdSelectExcel.FileName.Trim());
}
}
}
************************************************* *******
Extraer datos
public void ImportExcelToSqlServer (nombre de archivo de cadena)
{
si (nombre de archivo == nulo)
{
throw new ArgumentNullException("¡la cadena del nombre de archivo es nula!");
}
si (nombre de archivo.Longitud == 0)
{
throw new ArgumentException("¡la cadena del nombre de archivo está vacía!");
}
cadena oleDBConnString = String.Empty;
oleDBConnString = "Proveedor=Microsoft.Jet.OLEDB.4.0;";
oleDBConnString += "Fuente de datos=";
oleDBConnString += nombre de archivo;
oleDBConnString += ";Propiedades extendidas=Excel 8.0;";
OleDbConnection oleDBConn = nulo;
OleDbDataAdapter oleAdMaster = nulo;
Tabla de datos m_tableName=nueva tabla de datos();;
Conjunto de datos ds=nuevo conjunto de datos();
intentar
{
oleDBConn = nueva OleDbConnection(oleDBConnString);
oleDBConn.Open();
m_tableName=oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
si (m_tableName! = nulo && m_tableName.Rows.Count > 0)
{
m_tableName.TableName =m_tableName.Rows[0]["TABLE_NAME"].ToString()
;
cadena sqlMaster;
sqlMaster=" SELECCIONAR * DESDE ["+m_tableName+"]";
oleAdMaster=nuevo OleDbDataAdapter(sqlMaster,oleDBConn);
oleAdMaster.Fill(ds,"m_tableName");
Administrador de MailRebateManager=nuevo MailRebateManager();
bool isSucess=manger.AddExceLGmailRebate(ds.Tables["m_tableName"],ApplicationVariable.HomeCompanyID);
si (es éxito)
{
MessageBox.Show ("¡Manipular éxitos!");
}
demás
{
MessageBox.Show("Error en la manipulación");
}
}
captura (Excepción ex)
{
MessageBox.Show(ex.Mensaje);
SimpleLogger.Log(ex);
intentar
{
}
captura (OleDbException e)
{
SimpleLogger.Log(e);
MessageBox.Show("Una excepción de tipo " + e.GetType() +");
}
}
}
*****************************************
Procese los datos e insértelos en la tabla principal y en la tabla esclava respectivamente.
bool público AddExceLGmailRebate (DataTable tb, cadena homeCompanyID)
{
bool ret=falso;
Conexión Sql con=null;
Tabla de datos = nueva tabla de datos ();
tabla=tb;
cadena sConn = PublicManager.GetDBConnectionString(homeCompanyID);
con=nueva Conexión Sql();
con.ConnectionString=sConn;
SqlTransaction tran=null;
SqlCommand com=null;
SqlCommand comm=null;
intentar
{
con.Open();
tran = con.BeginTransaction();
si (tabla! = nulo && tabla.Rows.Count > 0)
{
para(int i=1;i<table.Rows.Count;i++)
{
cadena m_PromoCode=Convert.ToString(table.Rows[i][0]);
si(m_PromoCode=="")
{
m_PromoCode=Convert.ToString(table.Rows[i-1][0]);
}
si(m_CódigoPromo.Longitud>50)
{
m_PromoCode=m_PromoCode.Substring(0,50);
}
cadena m_ItemDescription=Convert.ToString(table.DefaultView[i][1]);
if(m_ItemDescription.IndexOf("(")>0)
{
int num=m_ItemDescription.IndexOf("(");
m_ItemDescription=m_ItemDescription.Substring(0,núm);
if(m_ItemDescription.Longitud>50)
{
m_ItemDescription=m_ItemDescription.Substring(0,50);
}
}
if(m_ItemDescription.Longitud>50)
{
m_ItemDescription=m_ItemDescription.Substring(0,50);
}
cadena comenzar=Convert.ToString(table.DefaultView[i][2]);
cadena m_BeginPromoPeriodDate;
cadena m_EndPromoPeriodEndDate;
si(comienzo=="")
{
continuar;
}
demás
{
cadena comenzarTime=begin.Substring(0,8);
comenzarTime=beginTime.Replace("/","-");
m_BeginPromoPeriodDate=hora de inicio;
cadena endTime=begin.Substring(begin.Length-8);
endTime=endTime.Replace("/","-");
m_EndPromoPeriodEndDate=hora de finalización;
}
cadena m_RebateAmountStr=Convert.ToString(table.DefaultView[i][3]);
si(m_RebateAmountStr.Length >9)
{
m_RebateAmountStr=m_RebateAmountStr.Substring(0,9);
}
decimal m_RebateAmount;
si(m_RebateAmountStr=="")
{
m_ReembolsoAmount=0;
}
demás
{
m_RebateAmount= Convert.ToDecimal(m_RebateAmountStr);
}
cadena m_TotalSoldStr=Convert.ToString(table.DefaultView[i][7]);
si(m_TotalSoldStr.Length >4)
{
m_TotalSoldStr=m_TotalSoldStr.Substring(0,4);
}
int m_TotalVendido;
si(m_TotalVendStr=="")
{
m_TotalVendido=0;
}
demás
{
m_TotalSold=Convert.ToInt32(m_TotalSoldStr);
}
cadena m_RebateReserveStr=Convert.ToString(table.DefaultView[i][8]);
si(m_RebateReserveStr.Length>9)
{
m_RebateReserveStr=m_RebateReserveStr.Substring(0,9);
}
decimal m_RebateReserve;
si(m_RebateReserveStr=="")
{
m_RebateReserve=0;
}
demás
{
m_RebateReserve=Convert.ToDecimal(m_RebateReserveStr);
}
cadena m_RedeemedStr=Convert.ToString(table.DefaultView[i][17]);
si(m_RedeemedStr.Length >8)
{
m_RedeemedStr=m_RedeemedStr.Substring(0,8);
}
decimal m_Redimido;
si(m_RedeemedStr=="")
{
m_Redimido=0;
}
demás
{
m_Redeemed=Convert.ToDecimal(m_RedeemedStr);
}
cadena m_PromoItem=Convert.ToString(table.DefaultView[i][23]);
si(m_PromoItem.Longitud >50)
{
m_PromoItem=m_PromoItem.Substring(0,50);
}
FechaHora m_InDate;
m_InDate=FechaHora.Ahora;
cadena m_sqlMaster="INSERT INTO act.dbo.Newegg_GMailRebate(PromoCode,PromoItem,RebateAmount,ItemDescription,BeginPromoPeriodDate,
EndPromoPeriodEndDate,PostMaskDate,TotalSold,RebateReserve,Canjeado,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=nuevo SqlCommand(m_sqlMaster,con);
comm.Transacción =tran;
comm.ExecuteNonQuery ();
comunicación.Dispose();
}
para(int i=1;i<table.Rows.Count;i++)
{
cadena m_PromoCode=Convert.ToString(table.Rows[i][0]);
si(m_PromoCode=="")
{
continuar;
}
int m_PromoCodeTransactionID=GetMasterTransactionID(m_PromoCode,homeCompanyID);
cadena m_InvoiceNumber=Convert.ToString(table.Rows[i][4]);
if(m_NúmeroFactura.Longitud >30)
{
m_NúmeroFactura=m_NúmeroFactura.Substring(0,30);
}
if(m_NúmeroFactura=="")
{
m_NúmeroFactura="0";
}
cadena m_InvoiceDate=Convert.ToString(table.DefaultView[i][6]);
if(m_FechaFactura=="")
{
FechaHora m_InDate;
m_InDate=FechaHora.Ahora;
m_InvoiceDate=Convert.ToString(m_InDate);
}
cadena m_serialNumberStr=Convert.ToString(table.Rows[i][5]);
si(m_serialNumberStr.Length >4)
{
m_serialNumberStr=m_serialNumberStr.Substring(0,4);
}
si(m_serialNumberStr=="")
{
m_serialNumberStr="0";
}
int m_serialNumber=Convert.ToInt32(m_serialNumberStr);
cadena m_TotalValidStr=Convert.ToString( table.DefaultView[i][9]);
si(m_TotalValidStr.Length >4)
{
m_TotalValidStr=m_TotalValidStr.Substring(0,4);
}
si(m_TotalValidStr=="")
{
m_TotalValidStr="0";
}
int m_TotalValid=Convert.ToInt32 (m_TotalValidStr);
cadena m_TotalInValidStr=Convert.ToString( table.DefaultView[i][10]);
si(m_TotalInValidStr.Length >4)
{
m_TotalInValidStr=m_TotalInValidStr.Substring(0,4);
}
si(m_TotalInValidStr=="")
{
m_TotalInValidStr="0";
}
int m_TotalInValid=Convert.ToInt32(m_TotalInValidStr);
cadena m_ProcessFeeStr=Convert.ToString(table.DefaultView[i][13]);
si(m_ProcessFeeStr.Length >9)
{
m_ProcessFeeStr=m_ProcessFeeStr.Substring(0,9);
}
si(m_ProcessFeeStr=="")
{
m_ProcessFeeStr="0";
}
decimal m_ProcessFee=Convert.ToDecimal(m_ProcessFeeStr);
string m_sqlDetails="INSERT INTO act.dbo.Newegg_GMailExcelMaster(ID de transacción del código de promoción, número de factura, fecha de factura, número de serie,
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.Transacción =tran;
com.ExecuteNonQuery();
com.Dispose();
m++;
}
tran.Commit();
ret=verdadero
;
}
captura (Excepción ex)
{
intentar
{
tran.Rollback();
}
captura (SqlException e)
{
si (tran.Conexión! = nulo)
{
MessageBox.Show("Una excepción de tipo " + e.GetType() +");
}
}
MessageBox.Show("Error al aparecer el número de fila:"+m.ToString());
MessageBox.Show("Detalles del error:"+ex.Message);
SimpleLogger.Log(ex);
ret=falso;
}
finalmente
{
con.Close();
con.Dispose();
}
return ret
}
Fuente: Columna Chengdu DotNet Club (kim)