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类型对象,而不接受布尔对象。
请指导我。
答案 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)
cmd.Parameters.Add(New SqlParameter("@ID", SqlDbType.Int)
.Direction = ParameterDirection.Input)
你试图将new SqlParameter(...).Direction = ParameterDirection.Input
的结果添加到cmd.Parameters
,这是布尔值(它是比较)。
您必须先初始化参数,然后将它们添加到集合中:
您要添加@ID
两次。
由于@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}}