相关疑难解决方法(0)

在SqlParameter中使用DateTime存储过程,格式错误

我正在尝试从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)手动设置DbTypeSqlParameterto 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)

c# sql-server datetime stored-procedures .net-2.0

23
推荐指数
1
解决办法
14万
查看次数

标签 统计

.net-2.0 ×1

c# ×1

datetime ×1

sql-server ×1

stored-procedures ×1