C# 批量插入时的InvalidOperationException
我有一个.Net应用程序,用户可以上传格式化的csv文件。程序解析这些值,然后将它们上传到我们的数据库 问题是,最初的程序员为每一行数据创建了一个循环和一个sql insert语句。在一些较大的csv文件上,这可能需要几个小时 我决定通过将数据放入datatable并进行批量更新来解决这个问题。我遇到的问题是在我的C# 批量插入时的InvalidOperationException,c#,C#,我有一个.Net应用程序,用户可以上传格式化的csv文件。程序解析这些值,然后将它们上传到我们的数据库 问题是,最初的程序员为每一行数据创建了一个循环和一个sql insert语句。在一些较大的csv文件上,这可能需要几个小时 我决定通过将数据放入datatable并进行批量更新来解决这个问题。我遇到的问题是在我的.WriteToServer行上出现无效操作异常 这是我的密码 Guid jobId = Guid.NewGuid(); int goodRows = 0,
.WriteToServer
行上出现无效操作异常
这是我的密码
Guid jobId = Guid.NewGuid();
int goodRows = 0, badRows = 0;
DataTable bulkSimulatorData = new DataTable();
bulkSimulatorData.Columns.Add(new DataColumn("jobId", typeof(string)));
bulkSimulatorData.Columns.Add(new DataColumn("Column1", typeof(string)));
bulkSimulatorData.Columns.Add(new DataColumn("Column2", typeof(string)));
bulkSimulatorData.Columns.Add(new DataColumn("Column3", typeof(string)));
if (CDR.PostedFile != null && CDR.PostedFile.ContentLength > 0)
{
StreamReader csvReader = new StreamReader(CDR.PostedFile.InputStream);
{
string inputLine = "";
SimulatorCDR cdr = null;
while ((inputLine = csvReader.ReadLine()) != null)
{
try
{
string[] values = inputLine.Split(new Char[] { ',' });
if (values.Length == 4)
{
bulkSimulatorData.Columns.Add(new DataColumn("Column4", typeof(string)));
cdr = new SimulatorCDR(jobId, values[0].ToString(), values[1].ToString(), Convert.ToDecimal(values[2]), Convert.ToDecimal(values[3]));
if (cdr.Save())
{
bulkSimulatorData.Rows.Add(jobId, values[0].ToString(), values[1].ToString(), Convert.ToDecimal(values[2]), Convert.ToDecimal(values[3]));
goodRows++;
}
else
{
badRows++;
}
}
else
{
cdr = new SimulatorCDR(jobId, values[0].ToString(), values[1].ToString(), Convert.ToDecimal(values[2]));
if (cdr.Save())
{
bulkSimulatorData.Rows.Add(jobId, values[0].ToString(), values[1].ToString(), Convert.ToDecimal(values[2]));
goodRows++;
}
else
{
badRows++;
}
}
}
catch(Exception ex)
{
}
}
csvReader.Close();
}
}
if (goodRows > 0)
{
string constring = ConfigurationManager.ConnectionStrings["DTH"].ConnectionString;
string trafficType = Conversational.Checked ? "CONVO" : "DIALER";
using(SqlBulkCopy oSqlBulkCopy = new SqlBulkCopy(constring))
{
oSqlBulkCopy.BatchSize = goodRows;
oSqlBulkCopy.BulkCopyTimeout = 100000;
oSqlBulkCopy.ColumnMappings.Add("JobID", "JobID");
oSqlBulkCopy.ColumnMappings.Add("Column1", "SourceNumber");
oSqlBulkCopy.ColumnMappings.Add("Column2", "DestNumber");
oSqlBulkCopy.ColumnMappings.Add("Column3", "Duration");
oSqlBulkCopy.DestinationTableName = "[RATESIM].[dbo].[CDR]";
oSqlBulkCopy.WriteToServer(bulkSimulatorData);
}
string sql = "exec RATESIM.dbo.spQueueRatingSimulatorJob '" + jobId + "', '" + Utils.sanitize(Name.Text) + "', '" + Email.Text + "', '" + Utils.sanitize(Phone.Text) + "', '" + trafficType + "'";
if (Utils.ExecuteSQL("DTH", sql, 100))
{
Message.Text = "Parsed " + goodRows + " CDRs in " + (goodRows + badRows) + " lines. A report will be sent to your email address after processing is complete.";
Message.CssClass = "did_success";
}
}
异常是否包含任何有用的信息?不幸的是,System.Data.dll中没有发生类型为“System.InvalidOperationException”的异常,但未在用户代码中处理。请尝试捕获大容量复制代码,并用异常更新您的问题。因此。。。这很奇怪。我照你说的做了,结果我的计划成功了。数据已成功放入我的数据库。您所做的只是将“重试捕获”放在它周围?你走过去了吗?