将数据从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;
}
}
我不知道如何让它工作得很好......如果有人建议我这样做会很有帮助。
谢谢你。
答案 0 :(得分:0)
错误是由于拆箱不当造成的。 (参考: http://msdn.microsoft.com/en-us/library/b95fkada(v=vs.80).aspx)
响应限制:我不知道属性类型 TB_TransAgentSeaFreightRate。
假设:分配给属性的数据类型与
的类型相匹配
属性。
我看到有两种方法可以从调试中处理这个问题 观点出发
考虑到你这样做的方式,你将无法看到确切的结果 失败。你可以暂时移动初始化 新成员中的成员。
或者,您可以重复调试每个代码 时间从作业中评论出1行,直到找到 违规行。
我正在将Convert.ToDateTime作为问题的来源。它扔了一个 FormatException for和无效的DateTime。 参考。 http://msdn.microsoft.com/en-us/library/xhz1w05e(v=vs.110).aspx
我的猜测是它发生在一个mobjGenlib.ConvertLong上。你要去 必须通过代码调试才能找到有问题的行。另请注意,由于数据,此错误正在发生。您需要考虑这种类型的错误,并在代码中处理它。