2010-02-23 5 views
0

с помощью SQL Server 2005 и VB.NetВыбор приближенных значений с помощью хранимой процедуры

Table1

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

nitpicking: это 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)) 

Do не используйте конструкцию, как в вашем примере ("Exec SelectTable1 where id like '" & idsearch.Text & "%' "), так как это открытый SQL Injection уязвимость.

Вы должны использовать parameters, как описано выше, чтобы этого избежать.

+1

+1. Единственный из нас, кто упоминает об уязвимости SQL Injection. Отличная работа. – 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 с сайта я связан с ,

Смежные вопросы