にストアドプロシージャにvb.netからのDataTableを渡すとき、私はテーブルを受け取るストアドプロシージャを持っていますが、私はこのエラーを取得し、インサート作るたび:エラーSQL Serverの
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
)
として表Iは、パラメータとしてデータテーブルを取るストアドプロシージャがあります。
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(あなたが投稿していない)の定義にあります。エラーを見ると、数値(金額または数値または小数)でなければならないときに、varchar(基本的に文字列)である 'dtTabe'にデータ型があります。おそらくあなたがしてはならない$記号に対応するでしょう。 –
サイドノート:ストアドプロシージャのプレフィックス '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を作成すると、関数を使用するとすべてのクエリが実行され、DataTableまたはDataRowを例として返すといいでしょう。Dim DtTable as datatable = Exec_Query(クエリ:= "選択..."、LRw:= false)、Lrw =データローまたはデータテーブルが必要かどうかを判断するための論理行 – FrankMejia7