2

尝试将日期传递到存储过程中,如下所示:

@dateRegistered = '28/04/2012'

但它一直告诉我:

将数据类型 varchar 转换为日期时出错。

如果我这样做,它会起作用:

@dateRegistered = '04/28/2012'

但这不是我想要使用的格式。

我已运行以下查询来设置格式:

SET DATEFORMAT dmy

为什么它不起作用?

编辑:这是我的做法:

在我的存储过程中,我放了:

SET DATEFORMAT dmy

然后从代码中,我将其传递为:

myCommand.Parameters.Add("@dateRegistered", SqlDbType.Date);
myCommand.Parameters["@dateRegistered"].Value = DateTime.Now.ToString("dd/mm/yyyy");

我将它作为字符串传递以确保即使我的计算机(或服务器)具有不同的日期格式,它也将始终使用 dmy。

编辑编辑:

我将它作为 datetime.now 传递。我发的时候好像是把它转换成默认格式,我读的时候又把它转换回我的电脑格式。不确定这是如何发生的,但它似乎工作正常。

4

4 回答 4

3

看起来参数是a date(在数据库中),而您尝试传递a string(对应varchar于数据库中)。如果您改为传递 .NETDateTime对象,它应该可以按预期工作。

于 2012-04-28T10:56:09.907 回答
2

省去您的麻烦,并使用明确的日期格式 -20120428 (YYYYMMDD)2012-04-28.

顺便说一句:您提到您正在使用 C#(基于标签)-您如何使用 ADO.NET?还是 Linq to SQL / EF / 其他一些 ORM?

编辑:

好的,使用CONVERT带有适当参数的函数来指示日期字符串的格式

例如:

declare @D datetime
set @D = CONVERT(datetime, '04/28/2012', 101)
print @D

101是美国标准格式mm/dd/yyyy

使用 convert 将确保无论日期顺序等任何环境设置如何,它都始终有效。

于 2012-04-28T10:57:00.193 回答
1

dear your code is working after using * SET DATEFORMAT dmy because you are passing date as "dd/MM/yyyy" like "DateTime.Now.ToString("dd/mm/yyyy")"

check the date format in your database by following command :-

  • dbcc useroptions

and check "dateformat : mdy" by default. So passing your date in "MM/dd/yyyy" format will also work fine.

Happy Coding :)

于 2014-01-21T12:11:25.013 回答
1

如果你打电话set dateformat dmy,那只会影响当前的连接。在将字符串转换为日期之前,您必须每次都设置它。

最好的解决方案可能是 ISO 格式,就像@IanYates 建议的那样。

于 2012-04-28T11:11:23.783 回答