Sql server SQL Server存储过程需要参数
为什么我总是遇到这个错误: System.Data.SqlClient.SqlException:'过程或函数'getTicket'需要参数'@project_id',但未提供该参数。' 我创建了以下程序:Sql server SQL Server存储过程需要参数,sql-server,vb.net,stored-procedures,Sql Server,Vb.net,Stored Procedures,为什么我总是遇到这个错误: System.Data.SqlClient.SqlException:'过程或函数'getTicket'需要参数'@project_id',但未提供该参数。' 我创建了以下程序: ALTER PROCEDURE [dbo].[getTicket] @project_id INT AS BEGIN SELECT ticket_id, ticket_name, ticket_description,
ALTER PROCEDURE [dbo].[getTicket]
@project_id INT
AS
BEGIN
SELECT
ticket_id,
ticket_name,
ticket_description,
ticket_url,
ticket_date_posted,
ticket_status
FROM
ticket
WHERE
project_id = @project_id
END
这是我的vb代码:
Dim sqlCom As SqlCommand = New SqlCommand
sqlCom.Connection = SQLcon
sqlCom.CommandType = CommandType.StoredProcedure
sqlCom.CommandText = "getTicket"
sqlCom.Parameters.AddWithValue("@project_id", Request.QueryString("id"))
SQLcon.Open()
Dim DS As New DataSet
Dim SQLDA As SqlDataAdapter = New SqlDataAdapter(sqlCom.CommandText, SQLcon)
SQLDA.SelectCommand.CommandTimeout = 120
SQLDA.Fill(DS, "gvTable")
GridView1.DataSource = DS
GridView1.DataBind()
SQLcon.Close()
这是错误的:
Dim SQLDA As SqlDataAdapter=新的SqlDataAdapter(sqlCom.CommandText,SQLcon)
应该是这样的:
Dim SQLDA As SqlDataAdapter=新的SqlDataAdapter(sqlCom)
问题是您正在创建一个SqlCommand
对象并将参数添加到该对象中,但随后创建了一个不使用该命令的SqlDataAdapter
。相反,您只将SQL代码作为字符串
传递给构造函数,因此数据适配器使用该字符串创建一个新的SqlCommand
对象。当然,新命令没有添加参数
代码的其他方面也是次优的。以下是我认为的两个明智的选择:
Dim sqlCom作为SqlCommand=newsqlcommand(“getTicket”,SQLcon),带有{.CommandType=CommandType.StoredProcedure,
.CommandTimeout=120}
sqlCom.Parameters.AddWithValue(“@project\u id”,Request.QueryString(“id”))
Dim SQLDA As SqlDataAdapter=新的SqlDataAdapter(sqlCom)
以及:
Dim SQLDA As SqlDataAdapter=新的SqlDataAdapter(“getTicket”,SQLcon)
使用SQLDA.SelectCommand
.CommandType=CommandType.StoredProcess
.CommandTimeout=120
.Parameters.AddWithValue(“@project\u id”,Request.QueryString(“id”))
以
即使如此,这也忽略了一个事实,即应避免使用AddWithValue
,并将Add
与Value
属性的显式设置一起使用,例如
.Parameters.Add(“@project\u id”,SqlDbType.Int).Value=Request.QueryString(“id”))
许多方法都有两个传递参数
sqlCom.Parameters.AddWithValue("@project_id", SqlDbType.Int,Convert.toInt32(Request.QueryString("id")))
OR
sqlCom.Parameters.Add("@project_id", SqlDbType.Int);
sqlCom.Parameters("@project_id").Value = Convert.toInt32(Request.QueryString("id"));
在这个
sqlCom.Parameters.AddWithValue(“@project\u id”,Request.QueryString(“id”))
Request.QueryString(“id”)的数据类型是什么?不是这样。。您已解决此问题,将此Dim SQLDA更改为SqlDataAdapter=New SqlDataAdapter(sqlCom.CommandText,SQLcon)
更改为此
Dim SQLDA为SqlDataAdapter=New SqlDataAdapter(sqlCom)