2016-07-31 4 views
0

У меня есть следующая хранимая процедура в моей базе данных SQL Server, который выполняет отлично:SqlDataReader не возвращает никаких данных из SQL Server хранимых процедур

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[LoadStates] 
AS 
BEGIN 
    SELECT stateabbrev 
    FROM states 
    ORDER BY stateabbrev 
END 
GO 

Вот мои C# код; sdrData был инициализирован и кажется правильным, но набор результатов пуст. Пожалуйста помоги.

using (SqlCommand sqlCmd = new SqlCommand("LoadStates", sqlConn)) 
{ 
    sqlCmd.CommandType = CommandType.StoredProcedure; 

    // set up the parameters that the Stored Procedure expects 
    //sqlCmd.Parameters.Add("@States", SqlDbType.Char, 2).Direction = ParameterDirection.Output; 

    using (SqlDataReader sdrData = sqlCmd.ExecuteReader()) 
    { 
     while (sdrData.Read()) 
     { 
      string strDBNme = sdrData.ToString(); 
      //string strDBNme = (string)sdrData["States"]; 
      cmbxACState.Items.Add(strDBNme); 
     } 

     sdrData.Close(); 
    } 
} 

ответ

0
 SqlDataReader sdrData = null; 
     // create a connection object 
     SqlConnection conn = new SqlConnection(create your sql connection string here); 

// create a command object 
    SqlCommand cmd = new SqlCommand("LoadStates", conn); 
    sqlCmd.CommandType = CommandType.StoredProcedure; 
     try 
     { 
      // open the connection 
      conn.Open();     
      sdrData = cmd.ExecuteReader(); 
      while (sdrData.Read()) 
        { 
         //string strDBNme = sdrData.ToString(); 
         string strDBNme = (string)sdrData["States"]; 
         cmbxACState.Items.Add(strDBNme); 
        } 

     } 
     finally 
     { 
      // 3. close the reader 
      if (sdrData != null) 
      { 
       sdrData.Close(); 
      } 

      // close the connection 
      if (conn != null) 
      { 
       conn.Close(); 
      } 
     } 
+0

#Ramdeo angh - Я пробовал это и все тот же результат. Моя строка подключения уже открыта, я делаю это раньше. Есть ли способ отслеживать вызов сервера sql и посмотреть, что происходит с этим вызовом? – Cass

+0

Посмотрите на новый ответ, который я опубликовал. он работает и тестируется. вам нужно изменить свой код. откройте свое соединение перед операцией SQL-команды. SqlConn.openConnection(). и следующее изменение находится во время цикла. string strDBNme = (строка) sdrData ["stateabbrev"]; на месте штатов нужно поставить государство. –

0
string strDBNme = (string)sdrData["stateabbrev"]; 
+0

Я не получаю на это утверждение, строка strDBNme = (строка) sdrData [ "stateabbrev"] ;. SdrData.Read() не возвращает anythig – Cass

+0

Вы можете извлечь каждый столбец строки с числовым индексом, подобным этому, но это не очень читаемо. Поэтому используйте имя столбца. –

0
string connectionString = ConfigurationManager.ConnectionStrings["StackDemo"] 
       .ConnectionString; 
     using (SqlConnection connection = new SqlConnection(connectionString)) 
     { 

      connection.Open(); 
      using (SqlCommand cmd = new SqlCommand("LoadStates", connection)) 
      { 
       cmd.CommandType = CommandType.StoredProcedure; 


       using (SqlDataReader sdrData = cmd.ExecuteReader()) 
       { 
        while (sdrData.Read()) 
        { 
         Console.WriteLine((string)sdrData["stateabbrev"]); 

        } 

        sdrData.Close(); 
       } 
      } 
     } 
+0

это рабочая демонстрация. просто замените строку соединения на StackDemo. –

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