【问题标题】:Passing Date value from user defined table to a SQL Server 2008 stored procedure将用户定义表中的日期值传递给 SQL Server 2008 存储过程
【发布时间】:2017-12-01 17:38:08
【问题描述】:

将系统定义表中的日期值传递给从 vb.net 调用的存储过程会导致错误:

将参数值从 DataTable 转换为 DateTime 失败

代码:

Dim ValueTable As New DataTable
ValueTable.Columns.Add("Value", GetType(Double))
ValueTable.Columns.Add("timestamp", GetType(DateTime))
ValueTable.Columns.Add("point", GetType(Integer))
ValueTable.Columns.Add("valueNumeric", GetType(Double))

用户定义表如下

CREATE TYPE [dbo].[ValueTable] AS TABLE
                               (
                                    OID int primary key,
                                    [Value] [float] NULL,
                                    [timestamp] [datetime]  NULL,
                                    [point] [int] NULL,
                                    [valueNumeric] [float] NULL
                               )
GO

存储过程如下

CREATE PROCEDURE [dbo].[Insert_Values]
      @tblValues AS ValueTable READONLY
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO Value (Value, timestamp, Point, ValueNumeric)
        SELECT 
            Value, timestamp, point, valueNumeric 
        FROM 
            @tblValues
END

我需要通过从 vb.net 代码调用的存储过程插入多行。 当从 vb 以 SqlCommand 运行时,我收到此错误:

数据库错误:将参数值从 DataTable 转换为 DateTime 失败。

数据库是 SQL Server 2008。

【问题讨论】:

    标签: sql vb.net sql-server-2008


    【解决方案1】:

    在您创建的类型中,您有 5 列。您定义的数据表只定义了 4 列。我认为这是造成问题的原因。此外,您还需要更改存储过程以包含 OID 列,因为它是主键。

    【讨论】:

      猜你喜欢
      • 2016-07-12
      • 1970-01-01
      • 2017-02-19
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多