我正在调度一个windows服务,以便从要加载到该SQL服务器中的路径中选择一个文件。我使用datatable写入SQL服务器。当选择从路径到加载的第一个文件时,当执行第二次或两次之后面临异常时,就可以了。
当我调试im不面对这种异常时,只在datatable中添加一次。这是缓存问题还是我的错误?
注意:当我重新启动服务时,在经过一段时间相同的异常发生后,它正常工作,没有异常。
日志中的异常:
--一个名为“SGC#1_Created_By”的列已经属于这个DataTable。索引超出了数组的界限。
try
{
var columnDetails = GetTemplateColumn(UserId, lbtempid[tbl], DBConnection);
SqlConnection bulkcon = new SqlConnection(DBEncryption);
bulkcon.Open();
using (SqlTransaction transaction = bulkcon.BeginTransaction())
{
using (SqlBulkCopy sqlbc = new SqlBulkCopy(bulkcon, SqlBulkCopyOptions.KeepIdentity, transaction))
{
DataTable _table = new DataTable();
_table = DsLocalBorrowingTbl.Tables[tbl];
for (int _tbl = 0; _tbl < columnDetails.Count; _tbl++)
{
sqlbc.ColumnMappings.Add(columnDetails[_tbl].APL_MAS_CRA_Column_Name.Trim(), columnDetails[_tbl].APL_MAS_CRA_Column_Name.Trim());
}
sqlbc.ColumnMappings.Add("SGC#1_Created_By", "SGC#1_Created_By");
sqlbc.ColumnMappings.Add("SGC#2_Created_On", "SGC#2_Created_On");
sqlbc.ColumnMappings.Add("SGC#3_IsProcessed", "SGC#3_IsProcessed");
sqlbc.ColumnMappings.Add("SGC#4_Processed_On", "SGC#4_Processed_On");
System.Data.DataColumn newColumn = new System.Data.DataColumn("SGC#1_Created_By", typeof(System.Int32));
newColumn.DefaultValue = UserId;
_table.Columns.Add(newColumn);
System.Data.DataColumn newColumn1 = new System.Data.DataColumn("SGC#2_Created_On", typeof(System.DateTime));
newColumn1.DefaultValue = DateTime.Now;
_table.Columns.Add(newColumn1);
System.Data.DataColumn newColumn2 = new System.Data.DataColumn("SGC#3_IsProcessed", typeof(System.Int32));
newColumn2.DefaultValue = 0;
_table.Columns.Add(newColumn2);
System.Data.DataColumn newColumn3 = new System.Data.DataColumn("SGC#4_Processed_On", typeof(System.DateTime));
newColumn3.DefaultValue = DateTime.Now;
_table.Columns.Add(newColumn3);
SqlConnection sqlConn = new SqlConnection(DBConnection);
sqlbc.DestinationTableName = "iCon." + lbsheet[tbl].Trim();
sqlbc.WriteToServer(_table);
sqlConn.Close();
sqlConn.Open();
int ErrorListId = GetErrorListLastIdentity(DBConnection);
_LBErrocount += 1;
DsLocalBorrowingTbl.Tables[tbl].Rows.Count, DsLocalBorrowingTbl.Tables[tbl].Rows.Count, DBConnection, 1);
int statusCount = Convert.ToInt32(DsLocalBorrowingTbl.Tables[tbl].Rows.Count);
transaction.Commit();
_rowcount += DsLocalBorrowingTbl.Tables[tbl].Rows.Count;
}
}
bulkcon.Close();
}
catch (Exception ex)
{
WriteToFile(" StartExcelOperations_LocalBorrowing_Insertion error :" + ex.Message.ToString());
}发布于 2020-07-24 10:08:28
似乎您首先要创建数据表,然后用一个from覆盖它,我猜是一个静态类。对此函数的任何后续调用都会产生问题。要么删除第2行,要么在初始化函数中添加一次列。
DataTable _table = new DataTable();
_table = DsLocalBorrowingTbl.Tables[tbl];https://stackoverflow.com/questions/63069369
复制相似问题