2010-02-23 81 views
0

使用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 - 文本框输入值

当我尝试运行上述查询时显示错误。

如何使用条件执行存储过程?

需要查询帮助

+0

挑剔:这是一个STORE ** D **程序 - 不是存储程序.... –

回答

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

+1。我们中唯一提到SQL注入漏洞的人。做得好。 – David

0

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

例如

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

下面是标准的SQL Sever的ocumentation在http://msdn.microsoft.com/en-us/library/aa258259(SQL.80).aspx

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的文件。