wake-up-neo.net

Mehrere Datensätze aus gespeicherten proc in C # zurückgeben

Ich muss ein ASP klassisches System in C # konvertieren.

Ich habe eine gespeicherte Prozedur, die bis zu 7 Recordsets zurückgeben kann (abhängig von den übergebenen Parametern).

Ich muss wissen, wie ich einfach alle Recordsets als einzelne DataTables zurückgeben kann, sodass ich alles durchgehen kann, was da ist, und zum nächsten DataTable überspringe, wenn ich am Ende angelangt bin, ohne mehrere SQL-Anweisungen ausführen und mehrere Adapter verwenden zu müssen. Füllen Sie Anweisungen aus, um jede Tabelle einem DataSet hinzuzufügen.

Im klassischen Fall war es eine einfache Do While-Schleife objRS.EOF mit einem objRS.NextRecordset (), als ich zum Ende der Schleife kam, um zur nächsten Anweisung zu gelangen.

Gibt es etwas, das ich verwenden kann, ohne dass der aktuelle Back-End-Code vollständig umgeschrieben werden muss?

Jedes Recordset hat eine andere Anzahl von Spalten und Zeilen. Sie sind nicht miteinander verbunden. Wir geben mehrere Datensätze von Stored Proc zurück, um den Datenverkehr zu reduzieren.

Beispiele wären Nizza.

Vielen Dank

10
user2334626
SqlConnection con=new SqlConnection("YourConnection String");
SqlCommand cmd=new SqlCommand();
SqlDataAdapter da=new SqlDataAdapter();
DataSet ds = new DataSet();
cmd = new SqlCommand("name of your Stored Procedure", con);
cmd.CommandType = CommandType.StoredProcedure;
//cmd.Parameters.AddWithValue("@SuperID", id);//if you have parameters.
da = new SqlDataAdapter(cmd);
da.Fill(ds);
con.Close();

Danach können Sie verschiedene (7) Datensätze mit verwenden

ds.Tables[0]
ds.Tables[1]
ds.Tables[2]
ds.Tables[3]
ds.Tables[4]
ds.Tables[5]
ds.Tables[6]
12
Sasidharan

Wenn Sie ein DataSet mit der SqlDataAdapter.Fill()-Methode füllen, wird jedes Ihrer von der gespeicherten Prozedur zurückgegebenen Recordsets als DataTable in Ihrem Dataset zurückgegeben

DataSet dataset = new DataSet();
using (var adapter = new SqlDataAdapter("yourStoredProcedure", yourConnectionString))
{
    adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
    adapter.Fill(dataset);
}
for (int i = 0; i < dataset.Tables.Count; i++)
{
    // Do something for each recordset
}

Wenn Sie einen SqlDataReader verwenden, können Sie mit der Methode SqlDataReader.NextResult() zum nächsten Recordset wechseln:

using (var connection = new SqlConnection(yourConnectionString))
using (var command = new SqlCommand("yourStoredProcedure"))
{
    connection.Open();
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            // do something with first result set;
        }
        if (reader.NextResult())
        {
            while (reader.Read())
            {
                // do something with second result set;
            }
        }
        else
        {
            return;
        }
        if (reader.NextResult())
        {
            while (reader.Read())
            {
                // do something with third result set;
            }
        }
        else
        {
            return;
        }
    }
}
9
GarethD

das wird Ihnen alles zurückgeben, was Sie brauchen

using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
{
    using (SqlCommand cmd = new SqlCommand())
    {
        cmd.CommandText = "yoursp";
        cmd.Connection = conn;
        cmd.CommandType = CommandType.StoredProcedure;

        conn.Open();

        SqlDataAdapter adapter = new SqlDataAdapter(cmd);

        DataSet ds = new DataSet();
        adapter.Fill(ds);

        conn.Close();
    }
}
5
Ehsan

sie können mitif (dr.NextResult())überprüfen, ob dr ein weiteres Recordset oder nein hat.

und dann erneut mit dr.read wiederholen

versuche dies

string connStr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
SqlConnection Con = new SqlConnection(connStr);

try
{
    string str1 = "select productid,productname from products;select VendorFName from vendor";
    SqlCommand com = new SqlCommand(str1, Con);

    com.Connection.Open();

    SqlDataReader dr = com.ExecuteReader();

    DropDownList1.Items.Add("Select Product Id");
    DropDownList2.Items.Add("Select Vendor Name");

    while(dr.Read())
    {
        DropDownList1.Items.Add(dr.GetValue(0).ToString());
    }

    if (dr.NextResult())
    {
        while (dr.Read())
        {
            DropDownList2.Items.Add(dr.GetValue(0).ToString());
        }
    }
}
catch (Exception ex)
{
}
finally
{
    if (Con.State == ConnectionState.Open)
    {
        Con.Close();
    }
}
0
Dhaval