0

我收到一个错误

错误 [42500] 错误:3020 - 转换日期值“0000-00-48”时出错。在“salesOrder 交易日期”字段中

我要插入的日期值是4/4/2018.

我的代码

DateTime JobDate = Wintac_JobDate;

string addSalesOrder = "INSERT INTO SalesOrderLine (CustomerRefListID, TemplateRefListID," +
                       " SalesOrderLineItemRefListID, SalesOrderLineDesc,SalesOrderLineQuantity, SalesOrderLineRate, " +
                       "SalesOrderLineSalesTaxCodeRefListID, Memo, SalesOrderLineInventorySiteRefListID, SalesOrderLineInventorySiteLocationRefListID" +
                       ", TxnDate, ShipAddressAddr1, ShipAddressAddr2, ShipAddressAddr3, ShipAddressAddr4, ShipAddressAddr5, FQSaveToCache)" +
                       "VALUES('" + QBCustomerListID + "','" + templateLID + "', '" + LID + "', '" + Description + "', " + Quantity + ", " + 120 +  "," +
                                    " '" + SalesTax + "', '" +Wintac_WipNo+"','"+LaborSite+"','"+LaborSiteLocation+"',"+
                                    "?,'" + shipAdr1+ "','" + shipAdr2 + "','" + shipAdr3 + "','" + shipAdr4 + "','" + shipAdr5 + "'," +
                                    ""+ FQSaveToCache + ")";


OdbcCommand sqlcmd2 = new OdbcCommand(addSalesOrder, quickbookscon2);

sqlcmd2.CommandType = CommandType.Text;
sqlcmd2.CommandTimeout = 180;

MessageBox.Show(JobDate.ToShortDateString());
sqlcmd2.Parameters.Add("P7", OdbcType.DateTime).Value = JobDate

if (Quantity != 0)
{
   if (sqlcmd2.ExecuteNonQuery() == 1)
   {
       if(FQSaveToCache == 0)
          MessageBox.Show(" added successfully.");
   }
}
  sqlcmd2.Dispose()

我已经尝试转换变量 Job Date

  • 约会时间
  • 短日期字符串
  • 长日期字符串
  • 将变量直接输入到查询中

任何帮助,将不胜感激。

4

1 回答 1

0

我认为主要的问题是在那条线上;

sqlcmd2.Parameters.Add("P7", OdbcType.DateTime).Value = JobDate.ToLongDateString()

您尝试在类型列上插入字符串表示。DateTime这是完全错误的。您需要直接传递您的 DateTime 值,而不是传递它的字符串表示形式。要将其作为一种习惯来学习,请阅读要踢的坏习惯:选择错误的数据类型

除此之外,我在您的代码中也看到了一些问题:

  1. 您应该始终使用参数化查询。这种字符串连接对SQL 注入攻击是开放的。
  2. 使用using语句自动处理您的连接和命令,而不是Dispose手动调用您甚至没有考虑在代码中执行的调用方法。
于 2018-04-18T16:48:34.517 回答