我对Title的错误有疑问。当我尝试执行这样的存储过程时发生错误:
CREATE PROCEDURE [dbo].[insertTimeDate]
@tableName as nvarchar(28),
@timeStamp as datetime,
AS
DECLARE @query nvarchar(MAX);
BEGIN
SET @query = 'INSERT INTO [' +@tableName+'] (timeStamp) VALUES ('''+CONVERT(nvarchar, @timeStamp, 20)+''')'
EXEC (@query)
END
我从c#代码执行它:
dbCommand = new SqlCommand("insertTimeDate", dbConnection);
dbCommand.CommandType = CommandType.StoredProcedure;
dbCommand.Parameters.AddWithValue("@tableName", "table_name");
dbCommand.Parameters.AddWithValue("@timeStamp", DateTime.Now);
dbCommand.ExecuteNonQuery();
答案 0 :(得分:0)
尝试使用CONVERT中的样式126 - 这是适用于SQL Server的任何语言/区域设置的ISO-8601格式:
SET @query = 'INSERT INTO [' +@tableName+'] (timeStamp) VALUES (''' +
CONVERT(nvarchar, @timeStamp, 126) + ''')'
EXEC (@query)
答案 1 :(得分:0)
许多编码语言和SQL中的日期并不总是可以互换的。
您的问题很可能是您运行C#代码的系统时间设置,发送日期为m/d/yyyy hh:mi:ss AM
(2/25/2011 11:12:13 AM
)且SQL Server期待d/m/yyyy hh:mi:ss AM
({{1} })
所以第25个月超出了SQL Server的范围。
当您将程序从程序发送到另一个系统时,最好以ISO格式指定日期。
25/2/2011 11:12:13 AM
您可以在此处查看dbCommand.Parameters.AddWithValue("@timeStamp", DateTime.Now.ToString("s"));
格式列表http://www.dotnetperls.com/datetime-format
始终尽可能少地保留系统默认值。