2010-02-23 78 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的文件。