datetime格式在oledbCommand.executeNonQuery时发生更改

问题描述 投票:0回答:2

我在我的网站上有一个sql插入查询,该查询会插入一些字符串和整数,并在“ dd / MM / yyyy HH:mm:ss”中插入一个日期时间,直到今天它仍然运行良好。但是,从今天起,由于某种奇怪的原因,在查询的executeNonQuery方法期间,日期时间的格式更改为“ MM / dd / yyyy HH:mm:ss”。我不知道为什么会这样,这使我发疯。任何人都可以阐明为什么会发生这种情况以及如何防止这种变化吗?任何帮助将不胜感激。

查询:

"INSERT INTO Orders(OrderDate,MemberID,CityID,OrderAdress,CreditCardID,OrderStatus)VALUES(#" + o.OrderDate + "#," + o.MemberID + ","+o.CityID+",'" + o.OrderAdress + "',"+o.CreditCardID+",'Not sent')" 

o是保存所有数据的对象。

sql datetime ms-access oledb executenonquery
2个回答
0
投票

DateTime值不包含任何格式,但是如果要串联,请在该字符串表达式上强制使用该格式:

"INSERT INTO Orders(OrderDate,MemberID,CityID,OrderAdress,CreditCardID,OrderStatus) VALUES(#" + o.OrderDate.ToString("yyyy'/'MM'/'dd") + "#," + o.MemberID + "," + o.CityID + ",'" + o.OrderAdress + "'," + o.CreditCardID + ",'Not sent')" 

仍然,使用起来更简单。


0
投票

连接字符串时尝试建立查询时出现的大问题。这是暴露于SQL注入的巨大事物。最好的方法是使用PARAMETERIZED查询,您可以四处查找并找到它们,而您可能根本不知道它们。

基本上在查询中,您使用“?”作为所需参数的占位符,然后添加具有实际值/数据类型的参数对象,OleDb查询将其放置在其位置并具有适当的数据类型,因此您不必担心格式化字符串从特定的日期开始。

此外,对于名字,如果您的名字叫“ O'Conner”,该怎么办。您刚刚终止了查询字符串,否则将失败。您将严重挠头。

说了这么多,让我们回到您的查询,使其更具可读性,并对其进行参数化...

您将ms-access称为数据库和OleDb,这意味着您正在用C#或VB(也许是其他)编写。我将演示使用C#,您可以根据需要更改您的开发语言。

using(OleDbConnection connection1 = new OleDbConnection( WhateverYourConnectionString ) 
{
   connection1.Open();  
   using(OleDbCommand sqlcmd = new OleDbCommand("", connection1))
   {
      // simplified query and you can see the "?" place-holders
      sqlcmd.CommandText =
@"INSERT INTO Orders
  ( OrderDate,
    MemberID,
    CityID,
    OrderAdress,
    CreditCardID,
    OrderStatus )
  VALUES
  ( ?,
    ?,
    ?,
    ?,
    ?,
    'Not sent' )";

      // Now, add your parameters in the SAME ORDER as the "?" in the query
      sqlcmd.Parameters.AddWithValue("parmForDate", o.OrderDate ); 
      sqlcmd.Parameters.AddWithValue("parmForMember", o.MemberID ); 
      sqlcmd.Parameters.AddWithValue("parmForCity", o.CityID ); 
      sqlcmd.Parameters.AddWithValue("parmForAddress", o.OrderAddress ); 
      sqlcmd.Parameters.AddWithValue("parmForCard", o.CreditCardID ); 
      // since the last parameter is fixed, you can put that in explicitly.
      // you can similarly put fixed field of other strings, numbers.

      // Now you can execute it
      sqlcmd.ExecuteNonQuery();
   }

   connection1.Close()
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.