使用存储过程选择近似值

时间:2010-02-23 13:49:39

标签: sql-server vb.net

使用SQL Server 2005和VB.Net

表1

ID Name Dept

001 Raja IT
002 Ravi CSE
003 Suns IT

存储过程

Create Procedure Selecttable1 As Select ID, Name, Dept from table1

我想用

之类的条件执行存储过程
cmd = new sqlcommand("Exec SelectTable1 where id like  '" & idsearch.Text & "%' ", dbcon)
cmd.ExecuteNonQuery

idsearch.Text - 文本框输入值

当我尝试运行上面的查询时,它显示错误。

如何执行带条件的存储过程?

需要查询帮助

3 个答案:

答案 0 :(得分:3)

您似乎正在寻找使用参数运行存储过程。

为此,需要使用参数创建存储过程,调用它的代码应该传递它们。

存储过程:

Create Procedure Selecttable1 
   @inID INT
As Select ID, Name, Dept from table1
WHERE ID = @inID

代码:

cmd = new SqlCommand("SelectTable1", dbcon)
cmd.Parameters.Add(new SqlParameter("@inID", idsearch.Text))

使用类似示例("Exec SelectTable1 where id like '" & idsearch.Text & "%' ")的构造,因为这是一个开放的SQL Injection漏洞。

您应该使用parameters,如上所述,以避免这种情况。

答案 1 :(得分:0)

我会创建第二个存储过程,它将“idsearch”作为参数并直接在基础查询上应用LIKE条件。

e.g。

CREATE PROCEDURE MySproc2
    @IDSearch VARCHAR(100)
AS
BEGIN
   SELECT SomeField
   FROM YourTable
   WHERE AnotherField LIKE @IDSearch + '%'
END

答案 2 :(得分:0)

以下是http://msdn.microsoft.com/en-us/library/aa258259(SQL.80).aspx的标准SQL Server文档中的示例(不包含您的数据)

CREATE PROCEDURE au_info2
   @lastname varchar(30) = 'D%',
   @firstname varchar(18) = '%'
AS 
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
   ON a.au_id = ta.au_id INNER JOIN titles t
   ON t.title_id = ta.title_id INNER JOIN publishers p
   ON t.pub_id = p.pub_id
WHERE au_fname LIKE @firstname
   AND au_lname LIKE @lastname
GO

您可以从我链接到的网站找到SQL Server所需的大部分文档。