将字符串转换为 SQL 服务器日期时间,格式应为 "yyyy-MM-dd hh:mm:ss"

Convert string to SQL Server DateTime which should be in "yyyy-MM-dd hh:mm:ss" format

C# 的 DateTimedd.MM.yyyy hh:mm:ss 格式,因此它与 SQL 服务器使用的格式不兼容。我希望它采用 yyyy-MM-dd hh:mm:ss 格式。有谁知道我该怎么做?

DateTime odt = new DateTime(year, month, day, hour, minute, second);
string odt2= odt.ToString("yyyy-MM-dd hh:mm:ss");

这是我正在使用的存储过程;

ALTER PROCEDURE [dbo].[SELECT_ORDERSTATUS_BY_ORDERDATETIME]
    @ORDERDATETIME DateTime
AS
    SELECT dbo.OrderTable.Status
    FROM dbo.OrderTable
    WHERE OrderDateTime = @ORDERDATETIME

这是我的 C# 代码。 ExecuteScalar returns 空值,我认为这是因为 DateTime 根本不匹配。

DateTime odt = new DateTime(year, month, day, hour, minute, second);

SqlConnection con = generateConnectionString();
con.Open();

SqlCommand command = generateCommand("SELECT_ORDERSTATUS_BY_ORDERDATETIME", con);

SqlParameter paramOrderDateTime = new SqlParameter("@ORDERDATETIME", odt);
command.Parameters.Add(paramOrderDateTime);

string status = (string)command.ExecuteScalar();
currentstatusTextbox.Text = status;
con.Close();

SQL 服务器将 DateTime 值保存为二进制。它没有 any 格式概念。您看到的只是它们在 SSMS 或查询 window.

中的 文本 表示

如果你使用datetime or datetime2 as a column type, you can directly use your odt value in a parameterized queries.

在你的 edit 之后:

据我所知,您没有将 CommandType 设置为 StoredProcedure。如果您的 Status 列是用字符串映射的,并且其他一切都正常,那么这应该可以工作;

using(SqlConnection con = generateConnectionString())
using(var command = con.CreateCommand())
{
    command.CommandText = "SELECT_ORDERSTATUS_BY_ORDERDATETIME";
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.Add("@ORDERDATETIME", SqlDbType.DateTime).Value = odt;

    con.Open();
    string status = (string)command.ExecuteScalar();
}