2016-12-05 5 views
0

У меня возникли проблемы с передачей параметра в хранимую процедуру. Ошибка не возникает, но желаемый результат не может быть получен. .cs является:Передача параметра в хранимую процедуру из ASP.NET WinForm

private void btnSubmit_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     if (cbRegions.SelectedIndex > 0) 
     { 
      con = new SqlConnection(connectionString); 
      cmd = new SqlCommand("dbo.SectionIncharge", con); 
      cmd.Parameters.Add("@RegionName", SqlDbType.VarChar, 50).Value = cbRegions.SelectedItem.ToString(); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Connection = con; 
      con.Open(); 
      DataTable table = new DataTable(); 
      table.Load(cmd.ExecuteReader()); 
      dgvResults.DataSource = table; 
      con.Close(); 
     } 
    } 
    catch 
    { 

    } 
} 

.sql является:

ALTER PROCEDURE [dbo].[SectionIncharge] @RegionName varchar(50) --name 
AS 
select UserName 
from SystemUser 
where Description LIKE 'RD OFFICE ' + @RegionName AND 
Enable = 'Y' 
GO 

Я дважды проверил хранимую процедуру работает нормально в SQL Server Management Studio, но когда я пытаюсь вызвать его из WinForm, не выход. Может кому-то помочь. Спасибо

+0

Если вызов хранимой процедуры в SSMS прекрасен, проблема связана с вашим кодом C#, а не с кодом db. –

+0

Кто-то уже указал вам ExecuteNonQuery ... Кроме того, если вы используете LIKE, возможно, вы хотите соединить «%» с вашим значением параметра в proc – AntDC

ответ

0

Метод ExecuteNonQuery (как его можно угадать от имени) просто выполняет запрос и не получает никакого вывода с сервера.

Итак, вам нужно получить результаты, которые вы выбираете, - вы должны использовать метод ExecuteReader и вернуть его результат (см. Пример внизу страницы MSDN, с которой я связан).

В качестве альтернативы, если вы используете источники данных в качестве источника для своей сетки - вы можете использовать класс SqlDataAdapter, и это метод Fill для заполнения такого типа данных.

+0

Я обновил код, но безрезультатно. Во время dubugging курсор перескакивает из строки 'con = new SqlConnection (" connectionString ");' to 'catch'. – Jogi

+0

@RehanKhan Если вы измените код обработки исключений с 'catch' на что-то вроде' catch (Exception exc) '- вы сможете получить сообщение об исключении в время отладки. Возможно, что-то не так с вашей строкой соединения. –

+0

Да, я сделал это, чтобы увидеть сообщение InnerException, и оно говорит: String не форматируется JSON. Формат строки инициализации не соответствует спецификациям, начинающимся с индекса 0. « – Jogi

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