Выполнение хранимой процедуры SQL Server из C#
У меня есть проблемы с выполнением хранимой процедуры в консольном приложении C#, и я не знаю, в чем проблема. Не могли бы вы взглянуть?
string path="";
StringBuilder sb = new StringBuilder();
StringBuilder sqlErrorMessages = new StringBuilder("Sql Exception:n");
try
{
SqlConnection conn = new SqlConnection("Data Source=DESKTOP-M3IMRLE\SQLEXPRESS; Initial Catalog = db2; Integrated security=true");
Console.WriteLine("Enter path : ");
path = Console.ReadLine();
conn.Open();
SqlCommand cmd = new SqlCommand();
SqlCommand command = new SqlCommand("EXECUTE main.mainproc @path='" + path + "'", conn);
if(command!=null)
{
Console.WriteLine("JSON loaded");
}
conn.Close();
}
catch(SqlException ex)
{
sqlErrorMessages.AppendFormat("Message: {0}n", ex.Message);
}
2 ответов:
Можно выполнить хранимую процедуру, присвоив ее имя конструктору
SqlCommandи пометивCommandTypeкак хранимую процедуру.
Параметры загружаются в коллекциюParametersкоманды:SqlCommand cmd = new SqlCommand("mainproc", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@path", SqlDbType.NVarChar).Value = path; cmd.ExecuteNonQuery();Последний вызов
ExecuteNonQueryзапускает хранимую процедуру, но он предназначен для процедур, которые запускают команды INSERT/UPDATE или DELETE, или, другими словами, команды, которые не возвращают данные.Если предполагается, что хранимая процедура возвращает одну или несколько записей, то необходимо еще код:
.... SqlDataReader reader = cmd.ExecuteReader(); while(reader.Read()) { // Get data from the first field of the current record assuming it is a string string data = reader[0].ToString(); }Метод
ExecuteReaderначинает извлекать ваши данные с помощью вызоваRead, а затем продолжает, пока не появятся записи для чтения. Внутри цикла можно получить данные полей, индексирующие экземпляр reader (и преобразующие значение объекта в соответствующий тип)
Comments