哪种SQL日期格式

时间:2015-06-02 10:23:48

标签: c# sql sql-server tsql datetime

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

编辑问题。

5 个答案:

答案 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

因此,您始终可以使用2012020220151225格式的日期,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");

第二个是默认