Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 批量插入时的InvalidOperationException_C# - Fatal编程技术网

C# 批量插入时的InvalidOperationException

C# 批量插入时的InvalidOperationException,c#,C#,我有一个.Net应用程序,用户可以上传格式化的csv文件。程序解析这些值,然后将它们上传到我们的数据库 问题是,最初的程序员为每一行数据创建了一个循环和一个sql insert语句。在一些较大的csv文件上,这可能需要几个小时 我决定通过将数据放入datatable并进行批量更新来解决这个问题。我遇到的问题是在我的.WriteToServer行上出现无效操作异常 这是我的密码 Guid jobId = Guid.NewGuid(); int goodRows = 0,

我有一个.Net应用程序,用户可以上传格式化的csv文件。程序解析这些值,然后将它们上传到我们的数据库

问题是,最初的程序员为每一行数据创建了一个循环和一个sql insert语句。在一些较大的csv文件上,这可能需要几个小时

我决定通过将数据放入datatable并进行批量更新来解决这个问题。我遇到的问题是在我的
.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”的异常,但未在用户代码中处理。请尝试捕获大容量复制代码,并用异常更新您的问题。因此。。。这很奇怪。我照你说的做了,结果我的计划成功了。数据已成功放入我的数据库。您所做的只是将“重试捕获”放在它周围?你走过去了吗?