指定演员表无效。 LINQ

时间:2014-03-22 06:40:25

标签: c# linq-to-sql

将数据从excel插入数据库时​​会抛出上述错误

这是我的代码:

void insertDB()
       {
           string FileName = lblFileName.Text;
           string Extension = Path.GetExtension(FileName);
           string FolderPath = Server.MapPath(ConfigurationManager.AppSettings["FolderPath"]);
           string conStr = "";
           switch (Extension)
           {
               case ".xls": //Excel 97-03
                   conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FolderPath + FileName + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
                   break;
               case ".xlsx": //Excel 07
                   conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FolderPath + FileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";
                   break;
           }
           try
           {
               using (var context = new LQTransAgentSeaFreightRateDataContext())
               {
                   string sql = string.Format("Select * FROM [{0}]" ,  ddlSheets.SelectedValue);
                   using (var myConnection = new OleDbConnection(conStr))
                   using (var myCommand = new OleDbCommand(sql, myConnection))
                   {
                       myConnection.Open();
                       var myReader = myCommand.ExecuteReader();
                       while (myReader.Read())
                       {
                           context.TB_TransAgentSeaFreightRates.InsertOnSubmit(new TB_TransAgentSeaFreightRate()
                           {
                               tASF_VCPOD = myReader.GetString(0),
                               tASF_VCPOL = myReader.GetString(1),
                               tASF_VCForwarder = myReader.GetString(2),
                               tASF_VCForwarderReference = myReader.GetString(3),
                               tASF_VCShippingLine = myReader.GetString(4),
                               tASF_VCContainerType = myReader.GetString(5),
                               tASF_VCContainerSize = myReader.GetString(6),
                               tASF_DTEValidFrom = Convert.ToDateTime(myReader.GetString(7)),
                               tASF_DTEValidTo = Convert.ToDateTime(myReader.GetString(8)),
                               tASF_NUBasicRate = mobjGenlib.ConvertLong(myReader.GetString(9)),
                               tASF_NUPAF = mobjGenlib.ConvertLong(myReader.GetString(10)),
                               tASF_NUCAF = mobjGenlib.ConvertLong(myReader.GetString(11)),
                               tASF_NUPSS = mobjGenlib.ConvertLong(myReader.GetString(12)),
                               tASF_NUTotalAmount = mobjGenlib.ConvertLong(myReader.GetString(13)),
                               tASF_NUFreeDays = mobjGenlib.ConvertLong(myReader.GetString(14)),
                               tASF_VCCreditDays = myReader.GetString(15),
                               tASF_VCNITDeposit = myReader.GetString(16),
                               tASF_NUIsActive = 1,
                               tASF_mCMP_NUUniqueId = mobjGenlib.ConvertLong(TXTCompanyID.Text)
                           });
                       }
                   }

                   context.SubmitChanges();
               }
           }
           catch (Exception ex)
           {
               lblMessage.ForeColor = System.Drawing.Color.White;
               lblMessage.Text = ex.Message;
           }
       }

我不知道如何让它工作得很好......如果有人建议我这样做会很有帮助。

谢谢你。

1 个答案:

答案 0 :(得分:0)

错误是由于拆箱不当造成的。 (参考:    http://msdn.microsoft.com/en-us/library/b95fkada(v=vs.80).aspx

响应限制:我不知道属性类型    TB_TransAgentSeaFreightRate。

假设:分配给属性的数据类型与
的类型相匹配    属性。

我看到有两种方法可以从调试中处理这个问题    观点出发

  1. 考虑到你这样做的方式,你将无法看到确切的结果 失败。你可以暂时移动初始化 新成员中的成员。

  2. 或者,您可以重复调试每个代码 时间从作业中评论出1行,直到找到 违规行。

  3. 我正在将Convert.ToDateTime作为问题的来源。它扔了一个 FormatException for和无效的DateTime。 参考。 http://msdn.microsoft.com/en-us/library/xhz1w05e(v=vs.110).aspx

    我的猜测是它发生在一个mobjGenlib.ConvertLong上。你要去 必须通过代码调试才能找到有问题的行。另请注意,由于数据,此错误正在发生。您需要考虑这种类型的错误,并在代码中处理它。