Пример вызова хранимых процедур SQL Server

C Sharp > Пример вызова хранимых процедур SQL Server
29.11.2012 13:51:51


Наиболее часто встречающиеся слова в статье:

[SqlConnection] [SqlDbType] [подключения] [Console] [WriteLine] [SqlCommand] [Direction] [SqlParameter] [Parameters] [хранимая]


Статья:

Предположим, что в созданной ранее нами БД, есть хранимая процедура по имени "GetStudents"

Код SQL
1
2
3
4
5
6
7
 
CREATE PROCEDURE GetStudents
@ID INT,
@fio VARCHAR(50) output
AS
SELECT @fio = FIO FROM Test WHERE ID = @ID
Тогда вызывать её можно следующим образом.

Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
using System;
using System.Data.SqlClient;
using System.Data;

namespace Students
{

class Program
{
static void Main(string[] args)
{
/*Объявляем строковую переменную и записываем в нее
строку подключения
Data Source - имя сервера, по стандарту (local)\SQLEXPRESS
Initial Catalog - имя БД
Integrated Security=-параметры безопасности
Мое подключение имеет вид
*/
string connStr = @"Data Source=(local)\SQLEXPRESS;
Initial Catalog=Test;
Integrated Security=True";
/*Здесь указал имя БД(хотя для создания БД его указывать не нужно)
для того, чтобы проверить, может данная БД уже создана
Создаем экземпляр класса SqlConnection по имени conn
и передаем конструктору этого класса, строку подключения
*/
SqlConnection conn = new SqlConnection(connStr);
try
{
//пробуем подключится
conn.Open();
}
catch (SqlException se)
{
Console.WriteLine("Ошибка подключения:{0}", se.Message);
return;
}
Console.WriteLine("Соедение успешно произведено");
/*Создаем экземпляр класса SqlCommand по имени cm
и передаем конструктору этого класса, имя хранимой процедуры
и объект типа SqlConnection
*/
using(SqlCommand cm = new SqlCommand("GetStudents",cn)){
//информируем, о том, что это хранимая процедура
cm.CommandType = CommandType.StoredProcedure;
/*добавляем параметры, о чем было сказано ранее
*единственное, что нового - это param.Direction
*который указывает тип параметров - входные и выходные*/
SqlParameter param = new SqlParameter();
param.ParameterName = "@ID";
param.Direction = ParameterDirection.Input;
param.SqlDbType = SqlDbType.TinyInt;
//ID , который ищем
param.Value = 1;
cm.Parameters.Add(param);
param = new SqlParameter();
param.ParameterName = "@fio";
param.Direction = ParameterDirection.Output;
param.SqlDbType = SqlDbType.VarChar;
param.Size = 50;
cm.Parameters.Add(param);
//выполняем хранимую процедуру
cm.ExecuteNonQuery();
//выводим результат
Console.WriteLine(cm.Parameters["@fio"].Value);
}
}

}
}