我想知道什么是将DateTime对象解析到SQL服务器的最佳方法.
您在代码中生成SQL的位置.
我总是使用类似的东西,DateTime.Now.TolongDateString()
并且取得了很好的效果,除了今天我遇到了错误,它让我思考.
System.Data.SqlClient.SqlException: Conversion failed when converting datetime from character string
那么每个人的想法和推荐是什么方式,无论有什么设置,都可以运行所有SQL服务器.
也许是这样的 DateTime.Now.ToString("yyyy/MM/dd")
只有2种安全格式
ISO和ISO8601
ISO = yymmdd
ISO8601 = yyyy-mm-dd Thh:mm:ss:mmm(无空格)(注意T)
另请参见此处:为SQL Server设置标准DateFormat
为什么不参数化查询并将DateTime值作为SQL DateTime输入参数传递?
例如 INSERT INTO SomeTable (Blah, MyDateTime) VALUES (1, @MyDateTime)
那你就可以肯定了.即使您正在生成SQL,您应该能够专门处理这个问题吗?
我发现需要这种特定的格式:
DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fff")
注意外壳和没有任何空格.根据Robyn Page的说法,这是一种普遍的方法.
您应该使用参数化查询,并将DateTime对象作为SQL DateTime参数传递.
如果将DateTime解析为String,则必须在应用程序服务器上处理数据库服务器上的本地化设置.这可能会导致一些令人讨厌的惊喜,例如将日期视为美国格式,另一方面是英国.字符串9/12/2000可以是9月12日或12月9日.因此,在应用程序和数据库之间进行交换时,请将数据保留在DateTime对象/类型中.
只有在将DateTime解析为String时才会显示数据(GUI).但是,在解析时,应确保使用正确的本地化设置,以用户期望的格式显示它.
同样的原则适用于其他数据类型,例如float.这个字符串的表示形式取决于语言环境,我想你在将它传递给数据库时不会将float解析为String,那为什么要使用DateTime呢?