T-SQL使用哪种日期格式?它是否依赖于系统日期?无论系统日期格式如何,我如何确保正确传递参数。这个问题是由于错误引起的:
将数据类型nvarchar转换为datetime时出错。
部分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;
}
编辑问题。
答案 0 :(得分:2)
您现在发布的代码看起来是正确的 - 除了一件事:
command.Parameters.Add("@myFixDte", SqlDbType.DateTime).Value = DateTime.Parse(fixDate.ToShortDateString());
正如我在评论中所说,只有在转换为字符串时才会出现问题。所以就这样做:
command.Parameters.Add("@myFixDte", SqlDbType.DateTime).Value = fixDate;
DateTime
s(C#)和datetime
(T-SQL)不具有格式。将它们转换为字符串时会出现格式问题。在他们的原生代表中,他们通常只是一些事件(蜱,毫秒等)的计数,因为过去的一些固定点。 ADO.Net知道如何将DateTime
转换为SQL Server datetime
。
如果您还有其他转换问题,那么您尚未显示代码。但它又会因为您正在转换正确的数据类型(datetime
)并使用字符串。
答案 1 :(得分:0)
这不是有效的DATETIME格式DD-MM-YYYY
。
您可以在以下内容中使用 CONVERT :
DECLARE @myFixDte DATETIME
SET @myFixDte = CONVERT(DATE, N'30-12-2012', 104)
SELECT @myFixDte
或者您可以在不转换其他格式的情况下设置它,例如YYYY-MM-DD
答案 2 :(得分:0)
试试这个:
@myFixDte = convert(datetime, '30-12-2012', 105)
并查看@ N.Molderf
提供的链接答案 3 :(得分:0)
SQL Server始终以相同的方式识别一种格式,无论它使用哪种格式,并且格式为YYYYMMDD
。
因此,您始终可以使用20120202
或20151225
格式的日期,SQL Server将使用相同的掩码解析该参数。
答案 4 :(得分:-2)
为什么你没有告诉上面的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");
第二个是默认