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

本文关键字:quot 格式 ss mm hh yyyy-MM-dd 转换 字符串 SQL Server 时间 | 更新日期: 2023-09-27 18:07:13

c#的DateTimedd.MM.yyyy hh:mm:ss格式,因此它与SQL Server使用的格式不兼容。我希望它是在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返回空值,我认为这是因为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 Server日期时间,格式为"yyyy-MM-dd hh:mm:ss"格式

SQL Server将DateTime值保存为二进制。它没有任何格式概念。您所看到的只是它们在SSMS或查询窗口中的文本表示。

如果您使用datetimedatetime2作为列类型,您可以直接在参数化查询中使用您的odt值。

编辑后:

据我所知,您没有将CommandType设置为StoredProcedure。如果您的Status列映射为string,并且所有其他内容都可以,则应该可以工作;

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();
}