将DataTable从vb.net传递到SQL Server中的存储过程时出错

时间:2017-04-04 23:00:47

标签: c# sql-server vb.net stored-procedures datatable

我有一个接收表的存储过程,但每当我进行插入时,我都会收到此错误:

  

无法将char值转换为money。 char值的语法不正确。

我创建了一个类型为

的表
CREATE TYPE dbo.Example AS TABLE
(
  Id_Exmp          int, 
  Discount_Amount  Money
)

我有一个存储过程,它将数据表作为参数:

CREATE PROCEDURE dbo.SP_Exmp
    @datatable dbo.Example READONLY
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO dbo.destination_table(column_list)
        SELECT column_list 
        FROM @datatable;
END

这是我在VB.net中的代码:

Function Example(ByVal dtTable as datatable)
    Try
        ConexionSQL = New SqlConnection(IniciaConexion)
        Command = New SqlCommand("SP_Exmp", ConexionSQL)
        Command.CommandType = CommandType.StoredProcedure

        'Parametros a Utilizar
        Command.Parameters.AddWithValue("@datatable ", dtTable )

        ConexionSQL.Open()
        If Command.ExecuteNonQuery() Then
            Return True
        Else
            Return False
        End If
        ConexionSQL.Close()
        ConexionSQL.Dispose()
        Command.Dispose()

    Catch ex As Exception
        MensajeError(ex, "Error")
        Return False
    End Try
End Function

3 个答案:

答案 0 :(得分:1)

有几件事:

  1. Command.Parameters.AddWithValue("@datatable ", dtTable )
  2. 您需要设置其SqlDbType:

    Command.Parameters.AddWithValue("@datatable ", dtTable).SqlDbType = SqlDbType.Structured;
    

    <小时/>  2.在连接之前处理命令,或者甚至更好地使用使用模式:

    Using ConexionSQL = New SqlConnection(IniciaConexion)
        Using command As New SqlCommand
    
        End Using
     End Using
    

    <小时/>  3.尝试更改SQL DataTable以使第二列Decimal和.Net Datatable具有Decimal,而不是Money DataType,例如:

    DataTable dtTable = new DataTable();
    dtTable.Columns.Add("Id_Exmp", typeof(int));
    dtTable.Columns.Add("Discount_Amount", typeof(decimal));
    

答案 1 :(得分:0)

我发现它是什么问题,主要问题是我如何创建dtTable的顺序,为了正确填充表类型,我最常创建类型相同的列,作为示例。

Dim DtTable as datatable = Exec_Query(Query:=“Select Id_exm,Discoun ..”,LRw:= false)

无论出于什么原因我都陷入混乱,先打折,第二次打字,我没有注意到这一点,

然后一切正常。

答案 2 :(得分:-1)

您必须打开连接。

$('#YesIwant').on('change', function () {
   location.href = '@Url.Action("ResponseUser", "ResponseCont")?YesIwantValue=' + $('#YesIwant').val();
});