我在下面有以下ASP.NET(VB)代码。 我的目标是获取存储过程的输出,该过程接受1个参数并存储该信息 进入数据表:
Dim strConnection1 As String = System.Configuration.ConfigurationManager.AppSettings("Rdf2012")
Dim conn1 As System.Data.SqlClient.SqlConnection
conn1 = New System.Data.SqlClient.SqlConnection(strConnection1)
Dim cmd1 As New SqlCommand
Dim prm1 As New SqlParameter
Dim dtDataTable1 As DataTable
cmd1.Connection = conn1
cmd1.CommandText = "usp_GetDetails"
cmd1.CommandType = CommandType.StoredProcedure
prm1 = cmd1.Parameters.Add(strProgramID, SqlDbType.VarChar, 50)
prm1.Direction = ParameterDirection.Input
conn1.Open()
Dim dataAdapter As New SqlDataAdapter
dataAdapter.SelectCommand = cmd1
Dim ds1 As New DataSet
dataAdapter.Fill(ds1)
conn1.Close()
dtDataTable1 = ds1.Tables("Table1")
程序在
处停止 dataAdapter.Fill(ds1) and says:
@ 1012952-4403不是程序usp_GetDetails
的参数这就是存储过程的样子:
ALTER PROCEDURE [dbo].[usp_GetDetails]
@ProId VARCHAR(20) = NULL
AS
答案 0 :(得分:1)
你需要做
prm1 = cmd1.Parameters.AddWithValue ("@ProID", strProgramID)
而不是
prm1 = cmd1.Parameters.Add(strProgramID, SqlDbType.VarChar, 50)
prm1.Direction = ParameterDirection.Input
除非另有说明,否则将假定方向为输入。
答案 1 :(得分:1)
验证strProgramID等于什么。您可能正在传递参数值,其中参数名称是预期的。如果是这种情况,请替换
Dim prm1 As New SqlParameter
....
prm1 = cmd1.Parameters.Add(strProgramID, SqlDbType.VarChar, 50)
prm1.Direction = ParameterDirection.Input
与
cmd1.Parameters.AddWithValue("@ProId",strProgramID)
答案 2 :(得分:1)
您正在以错误的方式创建参数,请尝试以下操作:
Dim strConnection1 As String = System.Configuration.ConfigurationManager.AppSettings("Rdf2012")
Dim conn1 As System.Data.SqlClient.SqlConnection
conn1 = New System.Data.SqlClient.SqlConnection(strConnection1)
Dim cmd1 As New SqlCommand
Dim dtDataTable1 As DataTable
cmd1.Connection = conn1
cmd1.CommandText = "usp_GetDetails"
cmd1.CommandType = CommandType.StoredProcedure
cmd1.Parameters.Add("@ProId",strProgramID)
conn1.Open()
Dim dataAdapter As New SqlDataAdapter
dataAdapter.SelectCommand = cmd1
Dim ds1 As New DataSet
dataAdapter.Fill(ds1)
conn1.Close()
dtDataTable1 = ds1.Tables("Table1")