簡體   English   中英

將數據表從vb.net傳遞到SQL Server中的存儲過程時出錯

[英]Error when Passing a DataTable from vb.net to a stored procedure in SQL Server

我有一個接收表的存儲過程,但是每當進行插入操作時,都會出現此錯誤:

無法將char值轉換為金錢。 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

有兩件事:

  1. Command.Parameters.AddWithValue("@datatable ", dtTable )

您需要設置其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)); 

我發現了問題所在,主要的問題是創建dtTable的順序,為了正確填充表類型,我以示例的方式在該類型上以相同的順序創建了列。

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

無論出於什么原因,我無序地打折,然后是折扣,然后才是ID,我沒有注意

然后一切正常。

您必須打開連接。

ConexionSQL.Open().

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM