SqlParameterCollection只接受非null的SqlParameter类型对象,而不接受布尔对象

时间:2013-07-12 11:26:50

标签: vb.net stored-procedures

Dim db As Database = DatabaseFactory.CreateDatabase()
    Dim sqlCommand As String = "CategoryListShow"
    Dim cmd As DbCommand = db.GetStoredProcCommand(sqlCommand)
    cmd.Parameters.Add(New SqlParameter("@ID", SqlDbType.Int).Direction = ParameterDirection.Input)
    cmd.Parameters.Add(New SqlParameter("@ID", SqlDbType.Int, 4).Value = CategoryIdTxt.Text.Trim())
    cmd.Parameters.Add(New SqlParameter("@CategoryResult", SqlDbType.VarChar, 50).Direction = ParameterDirection.Output)
    Dim sqlReader As SqlDataReader = cmd.ExecuteReader()
    txtCategory.Text = cmd.Parameters("@CategoryResult").Value.ToString()
    sqlReader.Close()

我正在调用存储过程“CategoryListShow”。存储过程有两个参数,一个是ID,它是输入参数,CategoryResult是输出参数。我试图在这个文本框txtCategory.Text上显示输出参数的值。

错误:黄色屏幕说这个

SqlParameterCollection只接受非null的SqlParameter类型对象,而不接受布尔对象。

请指导我。

2 个答案:

答案 0 :(得分:3)

在您设置@ID值的行中,将其更改为此。

cmd.Parameters@("ID").Value = CategoryIdTxt.Text

您无需再次申报。只需设定它的价值即可。我发现处理参数的最佳方法是使用以下两行代码

cmd.Parameters.Add(New SqlParameter("@ProdID", Data.SqlDbType.Int)).Direction = ParameterDirection.Input
cmd.Parameters("@ProdID").Value = tProdID'obviously don't need this if it is an Output Param

答案 1 :(得分:1)

错误1:

cmd.Parameters.Add(New SqlParameter("@ID", SqlDbType.Int)
                              .Direction = ParameterDirection.Input)

你试图将new SqlParameter(...).Direction = ParameterDirection.Input的结果添加到cmd.Parameters,这是布尔值(它是比较)。

您必须先初始化参数,然后将它们添加到集合中:

错误2:

您要添加@ID两次。

错误3:

由于@ID被声明为Int,因此其值应为int =>类型在将CategoryIdTxt.Text分配给参数之前,请将Int转换为''' @ID ''' Dim param As SqlParameter = New SqlParameter("@ID", SqlDbType.Int, 4) param.Direction = ParameterDirection.Input param.Value = Int32.Parse(CategoryIdTxt.Text); cmd.Parameters.Add(param); ''' @CategoryResult ''' param = New SqlParameter("@CategoryResult", SqlDbType.VarChar, 50) param.Direction = ParameterDirection.Output cmd.Parameters.Add(param);


您可以按如下方式修复这些问题:

{{1}}