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?
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
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.)
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);
}
}
}