Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server存储过程需要参数_Sql Server_Vb.net_Stored Procedures - Fatal编程技术网

Sql server SQL Server存储过程需要参数

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,

为什么我总是遇到这个错误:

System.Data.SqlClient.SqlException:'过程或函数'getTicket'需要参数'@project_id',但未提供该参数。'

我创建了以下程序:

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)