我有收到表的存儲過程,但每當我做插入我得到這個錯誤:錯誤從vb.net在SQL Server傳遞一個DataTable添加到存儲過程時
Cannot convert a char value to money. The char value has incorrect syntax.
我創建了一個表類型
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
答案在'dtTable'(你沒有發佈)的定義中。如果你看一下錯誤,你有'dtTabe'數據類型是VARCHAR(基本上是一個字符串)時,它應該是數字(金錢或數字或小數)。可能會容納$符號,你不應該這樣做。 –
旁註:你應該** **不使用'sp_'前綴爲您的存儲過程。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –
感謝您的反饋,其實我使用更復雜的名稱爲SP,當我創建dtTable a使用函數執行任何查詢,我希望如果我想返回一個DataTable或DataRow作爲示例:Dim DtTable as datatable = Exec_Query(查詢:=「SELECT ...「,LRw:= false),Lrw =邏輯行,以確定是否需要一個數據行或數據表 – FrankMejia7