如何在与 SQL 的连接中设置日期格式?
Posted
技术标签:
【中文标题】如何在与 SQL 的连接中设置日期格式?【英文标题】:How to set date format in a connection to SQL? 【发布时间】:2011-09-05 01:21:42 【问题描述】:在 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
(实际上,由于显示的小时是19,我如何验证格式是h
或HH
?)。
我的问题是为什么以及在连接的哪个部分,格式会改变?如何在我的连接中设置不变的文化?
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);
【问题讨论】:
我怀疑该值在数据库中是否有格式。 Check here for details (处理 C#DateTime
但此处可能应用相同类型的逻辑)。
你在CDate
方法中有太多的returns
。你能告诉我们你的案子是哪一个被执行的吗?
@Snowbear,第一次返回是在我的程序中执行的,正如注释所添加的
A DateTime
是 DateTime
是 DateTime
- 它没有格式 - 它只是一个 DateTime
。您看到的是DateTime
的字符串表示 - 您可以选择您希望DateTime
的格式,但这是在逐个查询的基础上进行的,或者作为您的设置数据库 - 不是您可以在连接字符串中设置/更改的东西
【参考方案1】:
您不能在连接字符串上设置DateTime
格式。
您所看到的只是DateTime
的某个(内部)表示的不同格式。
格式由您使用的工具决定,对于 .NET 代码,由您登录时使用的文化决定。
当你想显示时间时,你需要格式化,但是当你使用自定义格式字符串时,没有CultureInfo
元素参与。
检查DateTime
上的不同ToString
重载。
【讨论】:
+1 完全正确 - SQL Server 中的DateTime
只是 DateTime
- 并且没有与之关联的“格式”。
如果我没看错的话,由于我的格式是yyyy-MM-dd HH:mm:ss,不对应任何格式,所以显示的时候不用担心CultureInfo?
@Summer - 我建议阅读custom Date and Time format strings 上的文档。文化可能会产生影响,尽管我不相信在这种特殊情况下会有影响。【参考方案2】:
您不能在连接字符串中设置日期格式,但可以在查询批处理中调用SET DATEFORMAT DMY
。
【讨论】:
以上是关于如何在与 SQL 的连接中设置日期格式?的主要内容,如果未能解决你的问题,请参考以下文章