ASPクラシックシステムをC#に変換する必要があります
(渡されたパラメーターに応じて)最大7つのレコードセットを返すことができるストアドプロシージャがあります。
複数のSQLステートメントを実行したり、複数のアダプターを使用したりせずに、すべてのレコードセットを個別のDataTableとして返すだけで、そこにあるものをループして、最後に到達したときに次のDataTableにスキップできるようにする方法を知る必要があります。ステートメントに入力して、各テーブルをDataSetに追加します。
古典的には、次のステートメントに移動するためにループの最後に到達したとき、それはobjRS.NextRecordset()を使用した単純なDo While notobjRS.EOFループでした。
現在のバックエンドコードを完全に書き直す必要のない、使用できるものはありますか?
各レコードセットには、異なる数の列と行があります。それらは互いに無関係です。 Stored Procから複数のレコードセットを返してトラフィックを減らします。
例はニースです。
ありがとう
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();
この後、を使用してさまざまな(7)レコードセットを利用できます
ds.Tables[0]
ds.Tables[1]
ds.Tables[2]
ds.Tables[3]
ds.Tables[4]
ds.Tables[5]
ds.Tables[6]
SqlDataAdapter.Fill()
メソッドを使用してDataSetに入力すると、ストアドプロシージャから返された各レコードセットは、データセット内のDataTableとして返されます
_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
}
_
SqlDataReaderを使用する場合、SqlDataReader.NextResult()
メソッドを使用して次のレコードセットに進むことができます。
_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;
}
}
}
_
これはあなたに必要なすべてを返します
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();
}
}
if (dr.NextResult())
を使用して、drにレコードセットがないかどうかを確認できます。
その後、dr.readで再度ループします
これを試して
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();
}
}