it-swarm.com.de

Wie kann ich eine Tabelle von einer gespeicherten Prozedur zu einer Datentabelle abrufen?

Ich habe eine gespeicherte Prozedur erstellt, um mir eine Tabelle zurückzugeben.

Etwas wie das:

create procedure sp_returnTable
body of procedure
select * from table
end

Wenn ich diese gespeicherte Prozedur im Frontend aufrufen, welchen Code muss ich schreiben, um sie in einem datierbaren Objekt abzurufen?

Ich habe Code wie den folgenden geschrieben. Grundsätzlich möchte ich wissen, wie man eine Tabelle abruft und in einem Datenobjekt speichert. Alle meine Abfragen werden ausgeführt, aber ich weiß nicht, wie eine Tabelle über eine gespeicherte Prozedur in eine Datentabelle geladen wird

DataTable dtable = new DataTable();
cmd.Connection = _CONN;

cmd.CommandText = SPNameOrQuery;
cmd.CommandType = CommandType.StoredProcedure;

SqlDataAdapter adp = new SqlDataAdapter(cmd);
OpenConnection();
adp.Fill(dtTable);
CloseConnection();

In diesem Code wurde ein Befehl an den Namen der gespeicherten Prozedur und ihre Parameter gebunden. Wird mir eine Datentabelle aus der gespeicherten Prozedur zurückgegeben?

31
Shantanu Gupta
string connString = "<your connection string>";
string sql = "name of your sp";

using(SqlConnection conn = new SqlConnection(connString)) 
{
    try 
    {
        using(SqlDataAdapter da = new SqlDataAdapter()) 
        {
            da.SelectCommand = new SqlCommand(sql, conn);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;

            DataSet ds = new DataSet();   
            da.Fill(ds, "result_name");

            DataTable dt = ds.Tables["result_name"];

            foreach (DataRow row in dt.Rows) {
                //manipulate your data
            }
        }    
    } 
    catch(SQLException ex) 
    {
        Console.WriteLine("SQL Error: " + ex.Message);
    }
    catch(Exception e) 
    {
        Console.WriteLine("Error: " + e.Message);
    }
}

Geändert von Java Schools Beispiel

46
GrayWizardx

Legen Sie auch die Variable CommandText fest und rufen Sie Fill für die Variable SqlAdapter auf, um die Ergebnisse in einer Variable DataSet abzurufen:

var con = new SqlConnection();
con.ConnectionString = "connection string";
var com = new SqlCommand();
com.Connection = con;
com.CommandType = CommandType.StoredProcedure;
com.CommandText = "sp_returnTable";
var adapt = new SqlDataAdapter();
adapt.SelectCommand = com;
var dataset = new DataSet();
adapt.Fill(dataset);

(Beispiel verwendet zur Vereinfachung parameterlose Konstruktoren; kann mit anderen Konstruktoren verkürzt werden.)

5
Andomar

Erklären, ob jemand beim Aufruf der gespeicherten Prozedur einige Parameter senden möchte (siehe unten),

using (SqlConnection con = new SqlConnection(connetionString))
            {
                using (var command = new SqlCommand(storedProcName, con))
                {
                    foreach (var item in sqlParams)
                    {
                        item.Direction = ParameterDirection.Input;
                        item.DbType = DbType.String;
                        command.Parameters.Add(item);
                    }
                    command.CommandType = CommandType.StoredProcedure;
                    using (var adapter = new SqlDataAdapter(command))
                    {
                        adapter.Fill(dt);
                    }
                }
            }
0
Rush.2707