Есть у меня программа, которой я могу подключаться к БД SQL, запускать процедуру на SQL сервере с параметрами, и получать ответ. Ответ это обычно список из одного столбца и нескольких строк.
string ConString = "Server=servname;Database=DB;Trusted_Connection=True;"; //строка подключения к БД с использованием Windows авторизации
using (SqlConnection connection = new SqlConnection(ConString))
{
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = string.Format(@"DECLARE @return_value int
EXEC @return_value = [dbo].[Match]
@FN_Client = N'{0}',
@LN_Client = N'{1}',
@MN_Сlient = N'{2}'
", fn, sn, mn);//текст запроса
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader[0].ToString());
}
return;
}
}
Хочу создать класс, и метод, чтобы не плодить много кода. Подскажите пожалуйста, как можно засунуть в метод мой код, чтобы на выходе получить список?
Не используйте String.Format
для построения SQL-запросов, это небезопасно. Вместо этого, используйте параметры.
Для вызова хранимой процедуры не обязательно составлять запрос EXEC вручную, можно установить тип запроса CommandType.StoredProcedure
, тогда достаточно написать имя процедуры
Метод для вызова процедуры, возвращающей список строковых значений, можно реализовать как-то так:
using System;
using System.Linq;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
public static IEnumerable<string> ExecuteProcedure(string sql, params SqlParameter[] args)
{
SqlConnection con = new SqlConnection(con_str);
con.Open();
using (con)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = sql;
cmd.Connection = con;
for(int i=0;i<args.Length;i++)
{
cmd.Parameters.Add( args[i]);
}
SqlDataReader rd = cmd.ExecuteReader();
using (rd)
{
DataTable dt = new DataTable();
dt.Load(rd);
var results = from myRow in dt.AsEnumerable()
select myRow[0].ToString();
return results;
}
}
}
Использование:
var collection = ExecuteProcedure("dbo.[Match]",
new SqlParameter("FN_Client", fn),
new SqlParameter("LN_Client ", ln),
new SqlParameter("MN_Сlient ",mn));
foreach (var s in collection ) Console.WriteLine(s);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Изначально это был тип array<System::ValueType^, 3>, в массиве содержатся данные картинки(грабятся с камеры), этот плагин написан на с++при передаче...
Недавно написал простенький движок для сайта: https://githubcom/Trojan4ik/MyLinked-CMS , но не могу понять что на данный момент в моем коде не так, что стоит добавить...