2016-07-31 12 views
0

Ich habe die folgende gespeicherte Prozedur in meiner SQL Server-Datenbank, die in Ordnung ausführt:SqlDataReader Rückkehr keine Daten von SQL Server gespeicherte Prozedur

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 

Hier ist mein C# -Code; sdrData wurde initialisiert und scheint korrekt zu sein, aber die Ergebnismenge ist leer. Bitte helfen Sie.

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(); 
    } 
} 

Antwort

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 - Ich habe das versucht und immer noch die gleichen Ergebnisse. Meine Verbindungszeichenfolge ist bereits geöffnet, ich mache es in einem Schritt vorher. Gibt es eine Möglichkeit, den Anruf zum SQL-Server zu verfolgen und zu sehen, was mit dem Anruf passiert? – Cass

+0

schau dir die neue Antwort an, die ich gepostet habe. es funktioniert und getestet. Sie müssen Ihren Code ändern. Öffnen Sie Ihre Verbindung vor der SQL-Befehlsanweisung. SqlConn.openConnection(). Die nächste Änderung erfolgt in der while-Schleife. string strDBNme = (string) sdrData ["stateabbrev"]; an der Stelle der Staaten müssen Stateabbrev setzen. –

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

Ich habe nicht auf diese Aussage, string strDBNme = (string) sdrData [ "stateabbrev"] ;. Die sdrData.Read() gibt keine anything – Cass

+0

Sie können jede Spalte der Zeile mit einem numerischen Indexer wie diesem extrahieren, aber es ist nicht sehr lesbar. Also benutze den Spaltennamen. –

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

es funktioniert Demo. Ersetzen Sie einfach Ihre Verbindungszeichenfolge mit StackDemo. –

Verwandte Themen