你好堆栈溢出社区,
我手上有一个疯狂的问题。这是我的问题:
1)。在执行 ExecuteNonQuery() 之前,我的数据库中没有记录
2)。执行 ExecuteNonQuery() 后,我的数据库中有两条记录,尽管我使用的是一条插入语句。
我的程序是多线程的。我已经限制了我的程序,所以只有一个线程在运行,但我仍然得到错误。
我会寻找其他领域,但我不知道在哪里搜索或任何会发生这种情况的原因。
这是我的程序的基本大纲。
每天启动一个线程
查找文件
从文件中提取信息
上传信息
这是我用来上传数据的代码(不包括错误处理)
string CommandString = INSERT INTO Production_Test.dbo.Transactions
(BoxId, ProcessDate, Batch, BillingElementID,
TransactionDescription, Quantity)
VALUES (@BoxId, @ProcessDate, @Batch,
@BillingElementID, @TransactionDescription, @Quantity)";
SqlCommand Command = new SqlCommand(CommandString, Database);
Command.Parameters.AddWithValue("ProcessDate", CheckPrimaryKeyForNull(this.ProcessDate));
Command.Parameters.AddWithValue("Batch", CheckPrimaryKeyForNull(this.Batch));
Command.Parameters.AddWithValue("BoxId", CheckPrimaryKeyForNull(this.BoxId));
Command.Parameters.AddWithValue("BillingElementId", CheckPrimaryKeyForNull(this.BillingElementId));
Command.Parameters.AddWithValue("TransactionDescription", CheckPrimaryKeyForNull(this.TransactionDescription));
Command.Parameters.AddWithValue("Quantity", CheckIfNullAddZero(this.Quantity));
Command.ExecuteNonQuery();
我只使用了一个插入语句,但它插入了两条记录。有人知道为什么会这样吗?
谢谢,
达伦。
编辑:这是我的代码的多线程部分。
for (DateTime CurrentDate = BeginningDate; CurrentDate <= EndingDate; CurrentDate = CurrentDate.AddDays(1))
{
DateTime TempCurrentDate = CurrentDate;
FileThreads[ThreadCounter] = new Thread(() => RipInformationFromFiles.Process(Parameters, TempCurrentDate, ArgsIndex));
FileThreads[ThreadCounter].Start();
ThreadCounter++;
}
foreach (Thread ThisThread in FileThreads)
{
if (ThisThread != null)
{
ThisThread.Join();
}
}
然后每个线程查看某个路径并更新信息。
我唯一有锁的时候是当我调用一个类的上传方法时。
lock (Locker)
{
ProductionDatabase.Upload();
}
我用这个static readonly object Locker = new object();
做我的锁。