如何在与SQL的连接中设置日期格式?

时间:2011-05-30 20:48:57

标签: c# sql sql-server datetime

在Microsoft SQL Server Management Studio中,调用存储过程后,我可以看到时间格式为2011-05-20 19:56:09

但是,在我的C#程序中,使用OdbcConnection从表中获取记录后,我发现时间格式为05/20/2011 19:56:09。因此,我手动将格式MM/DD/YYYY hh:mm:ss转换为YYYY-MM-DD hh:mm:ss(实际上,如何验证格式为hHH,因为显示的小时数为19?)。

我的问题是为什么以及连接的哪个部分,格式发生了变化?如何在我的连接中设置不变的文化?

cmd = new OdbcCommand("{?=CALL stored_procedure_in_SQL(?,?)}", m_SqlConn);
cmd.Parameters.Add(new OdbcParameter("RETURN_VALUE", OdbcType.Int, 4,
    ParameterDirection.ReturnValue, false, 0, 0, null, 
    DataRowVersion.Default, null));

//@parameter1
cmd.Parameters.Add("@parameter1", OdbcType.VarChar, 50).Value = value1;

//@parameter2
cmd.Parameters.Add("@parameter2", OdbcType.Int)=value2;

object objTime=ds.Tables[0].Rows[0][0]
Console.WriteLine(objTime.Tostring()) //05/20/2011 19:56:09
DateTime dateTime = Cdate(objTime, "MM/dd/yyyy h:mm:ss tt"); 
//2011-05-20 19:56:09 
Console.WriteLine(dateTime.ToString("yyyy-MM-dd HH:mm:ss")); 

//Function Cdate
static public DateTime Cdate(object val, string format)
{
    // check if the object is a date time alread
    string str;
    if(val is DateTime)
    {
        // Since val is already a dateTime,Return here
        return (DateTime)val; 
    }

    // convert via string
    if(val != DBNull.Value)
    {
        str = val.ToString().Trim();
    }
    else
    {
        str = "";
    }

    if(str == "")
    {
        return DateTime.MinValue;
    }
    else
    {
        return DateTime.ParseExact(str, format, 
            CultureInfo.InvariantCulture);
    }
}

2 个答案:

答案 0 :(得分:8)

您无法在连接字符串上设置DateTime格式。

您所看到的只是DateTime的某个(内部)表示的不同格式。

格式由您使用的工具和.NET代码确定您登录的文化。

如果您想显示时间,那么您需要格式化,但是当您使用自定义格式字符串时,不会涉及CultureInfo个元素。

检查DateTime上的不同ToString重载。

答案 1 :(得分:0)

您无法在connectionstring中设置日期格式,但可以在查询批处理中调用SET DATEFORMAT DMY