我有一个接收表的存储过程,但每当我进行插入时,我都会收到此错误:
无法将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
答案 0 :(得分: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));
答案 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();
});