T-SQL使用哪种日期格式?它依赖于系统日期吗?无论系统日期格式如何,我如何确保参数正确传递。出现这个问题是因为错误:
将数据类型nvarchar转换为日期时间错误。
SQL脚本部分:
CREATE PROCEDURE [dbo].[sz_pipeline04_pipelUpdte_inventory]
-- Add the parameters for the stored procedure here
@myFixDte datetime,
@doInsert bit
AS
BEGIN
调用c#代码:
public static DataTable GridInventory(string strdProcedureName, DateTime fixDate, bool execInsertYN)
{
DataTable dtbl_inventory = null;
try
{
dtbl_inventory = new DataTable();
using (var conn = new SqlConnection(cls_connRegistry.GetConnStrFull()))
using (var command = new SqlCommand(strdProcedureName, conn)
{
CommandType = CommandType.StoredProcedure
})
{
command.Parameters.Add("@myFixDte", SqlDbType.DateTime).Value = DateTime.Parse(fixDate.ToShortDateString());
command.Parameters.Add("@doInsert", SqlDbType.Bit).Value = execInsertYN;
conn.Open();
SqlDataReader dr = command.ExecuteReader();
dtbl_inventory.Load(dr);
conn.Close();
}
}
catch (Exception datawalile)
{ dtbl_inventory = null; }
return dtbl_inventory;
}
编辑问题。
你现在发布的代码看起来是正确的-除了一件事:
command.Parameters.Add("@myFixDte", SqlDbType.DateTime).Value = DateTime.Parse(fixDate.ToShortDateString());
正如我在评论中所说的,只有在转换为字符串时才会出现格式问题。所以请输入:
command.Parameters.Add("@myFixDte", SqlDbType.DateTime).Value = fixDate;
DateTime
(c#)和datetime
(T-SQL)没有格式。将它们转换为字符串时会出现格式问题。在它们的原生表示中,它们通常只是对过去某个固定点以来的事件数量(滴答、毫秒等)的计数。ADO。Net知道如何将DateTime
转换为SQL Server datetime
。
如果您有剩余的转换问题,它在您尚未显示的代码中。但是,这将再次是因为您正在转换正确的数据类型(datetime
)并使用字符串。
这不是有效的DATETIME格式DD-MM-YYYY
。
您可以在下列情况下使用CONVERT It:
DECLARE @myFixDte DATETIME
SET @myFixDte = CONVERT(DATE, N'30-12-2012', 104)
SELECT @myFixDte
或者您可以设置它而不转换为其他格式,如YYYY-MM-DD
试试这个:
@myFixDte = convert(datetime, '30-12-2012', 105)
并查看@N提供的链接。Molderf
SQL Server始终以相同的方式识别一种格式,无论它使用哪种区域性,该格式是YYYYMMDD
。
所以你总是可以使用20120202
或20151225
格式的日期,SQL Server将使用相同的掩码解析参数
为什么你不像上面那样告诉c# datetime,这里有一个简单的例子为你如何解决这个问题,在你的情况下,它将是这样的
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("dd-MM-yyyy HH:mm:ss");
或者这个
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");
第二个是默认值