将字符串转换为 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# 的 DateTime
是 dd.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();
}
C# 的 DateTime
是 dd.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();
}