我正在尝试从C#,.NET 2.0调用存储过程(在SQL 2005服务器上)DateTime作为a的值SqlParameter.存储过程中的SQL类型是"datetime".
从SQL Management Studio执行sproc工作正常.但是每当我从C#调用它时,我都会收到有关日期格式的错误.
当我运行SQL事件探查器来监视调用时,我会复制粘贴exec调用以查看正在发生的事情.这些是我对我尝试过的观察和注意事项:
1)如果我DateTime直接作为a DateTime或转换为传入SqlDateTime,则该字段由单引号的PAIR包围,例如
@Date_Of_Birth=N''1/8/2009 8:06:17 PM''
Run Code Online (Sandbox Code Playgroud)
2)如果我将DateTimein作为字符串传递,我只得到单引号
3)使用SqlDateTime.ToSqlString()不会产生UTC格式的日期时间字符串(即使转换为通用时间后)
4)使用DateTime.ToString()不会产生UTC格式的日期时间字符串.
5)手动设置DbType为SqlParameterto DateTime不会改变上述观察结果.
那么,我的问题是,我是如何让C#通过正确格式化的时间SqlParameter?当然这是一个常见的用例,为什么这么难以开始工作?我似乎无法转换DateTime为SQL兼容的字符串(例如'2009-01-08T08:22:45')
编辑
RE:BFree,实际执行sproc的代码如下:
using (SqlCommand sprocCommand = new SqlCommand(sprocName))
{
sprocCommand.Connection = transaction.Connection;
sprocCommand.Transaction = transaction;
sprocCommand.CommandType = System.Data.CommandType.StoredProcedure;
sprocCommand.Parameters.AddRange(parameters.ToArray());
sprocCommand.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
详细了解我的尝试:
parameters.Add(new SqlParameter("@Date_Of_Birth", DOB));
parameters.Add(new SqlParameter("@Date_Of_Birth", DOB.ToUniversalTime()));
parameters.Add(new SqlParameter("@Date_Of_Birth",
DOB.ToUniversalTime().ToString()));
SqlParameter param = new SqlParameter("@Date_Of_Birth", …Run Code Online (Sandbox Code Playgroud)