【问题标题】:Errors when inserting date and time into QODBC query C#将日期和时间插入 QODBC 查询 C# 时出错
【发布时间】:2018-04-18 16:39:28
【问题描述】:

我收到一个错误

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

我要插入的日期值是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

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

任何帮助将不胜感激。

【问题讨论】:

    标签: c# datetime insert odbc qodbc


    【解决方案1】:

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

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

    您尝试在 DateTime 类型的列上插入 字符串 表示。这是相当错误的。您需要直接传递您的 DateTime 值,而不是传递它的字符串表示形式。要将此作为习惯学习,请阅读Bad habits to kick : choosing the wrong data type

    除此之外,我在您的代码中还发现了一些问题:

    1. 您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。
    2. 使用using statement 自动处理您的连接和命令,而不是手动调用Dispose 方法,而您甚至 都没有考虑在代码中这样做。

    【讨论】:

    • 好的,谢谢,但我已经尝试直接使用 Job Date 作为 DateTime 它没有工作完全相同的错误显示。此外,我正在处理我只是没有将那部分代码复制到我的问题中的连接。
    猜你喜欢
    • 1970-01-01
    • 2012-02-28
    • 2016-04-01
    • 2015-03-17
    • 2011-02-25
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多