c# - 窗口服务 C# - 刷新问题
问题描述
我正在安排一个 Windows 服务从路径中选择一个文件以加载到该 SQL 服务器中。我正在使用数据表写入 SQL 服务器。虽然从路径中选择第一个文件来加载很好,但在第二次或几次后遇到异常时
当我调试我没有遇到这种异常时,由创建的列在数据表中添加一次。这是我的缓存问题还是错误?
请注意,当我重新启动服务时,在发生相同的异常后,它工作正常,没有异常
日志中的异常:
名为“SGC#1_Created_By”的列已属于此数据表。指数数组的边界之外。
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());
}
解决方案
看来您是首先创建数据表,然后用其中的一个覆盖它,我猜是一个静态类。对该函数的任何后续调用都应该产生问题。要么删除第二行,要么在初始化函数中添加一次列。
DataTable _table = new DataTable();
_table = DsLocalBorrowingTbl.Tables[tbl];
推荐阅读
- angular - 如何使用 pairwise() 管道使用 FormGroup.valueChanges?
- bazel - Bazel:cc_binary 无法在相关 cc_library 中找到标头
- java - 从 HashMap 中获取或获取 Object Array 中的值
- python-3.x - peewee playhouse.flask_utils import object_list 在首页什么都没有出现
- c - 我想检查我的函数是否返回一个指向正确对象的指针
- sql - 尝试在 Oracle 中创建静态函数时如何查看错误?当我运行它无法执行并且没有说任何错误
- filter - 为什么将过滤器添加到 web.xml 会导致 404 错误?
- microsoft-graph-api - 如何检索列表分配返回的引用实体
- git - 拉取来自分叉仓库的 PR 以在本地进行测试
- sql - 当我有 3 个其他对应列时,如何获得特定对应列的最大值?