【发布时间】:2019-01-24 14:59:57
【问题描述】:
从 C# 调用存储过程时出现以下错误。
参数在代码中定义为:
if (repRIS.Length > 0)
command.Parameters.AddWithValue("@repRIS", repRIS);
else
command.Parameters.AddWithValue("@repRIS", DBNull.Value);
command.Parameters.Add("@invDt", OleDbType.Date).Value = invDate;
我已经注释掉了存储过程中的所有内容,现在只有以下内容:
ALTER PROCEDURE [dbo].[SearchDates]
-- Add the parameters for the stored procedure here
@invDt datetime,
@repRIS varchar(10) ,
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
select this, that, and, the, other from myTableName ird
where
ird.RIS = COALESCE(@repRIS, ird.RIS)
and ird.InventoryDate = @invDt
END
InventoryDate 是数据库中的 DateTime 类型。
当我从 SQL MS 运行 SP 时,它产生的结果没有问题,但是,当使用应用程序调用它时,我收到以下错误消息
将数据类型 nvarchar 转换为日期时间时出错
我注意到它在我从 SQLConnection 切换到 OLEDBConnection 后开始发生。我还没有确认这一点。 (我必须切换以符合我之前编写的应用程序的其余部分)
更新:
当我在文本框中输入 9/30/2018 的值时,它被传递到存储过程中:{9/30/2018 12:00:00 AM} 转换为日期时间后(上面的代码)
【问题讨论】:
-
使用 SQL Server Profiler 查看您的应用程序如何发送@invDt
-
invDate的数据类型是什么?它是如何填充的?发生错误时填充了什么内容? -
它填充了 DateTime.MinValue {1/1/0001 12;00:00 AM}
-
OLEDB 没有问题。毕竟,这是连接到 SQL Server 的最常见方式。错误是明确的,试图混合字符串和日期。
invDate是String或InventoryDate是nvarchar -
问题可能是 ird.RIS 是一个日期时间字段,错误就在这里。 ird.RIS = COALESCE(@repRIS, ird.RIS)
标签: c# sql .net sql-server oledb