Выполнение хранимой процедуры 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);
}
631   2  

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 (и преобразующие значение объекта в соответствующий тип)

Вы не вызывали ExecuteNonQuery в вашей команде SqlCommand

command.ExecuteNonQuery()

Comments

    Ничего не найдено.