1

14 個のテーブルを返すストアド プロシージャがあります。さて、私のアプリケーションでは、テーブル、テーブル1、テーブル2、テーブル3などのDataTable名を持つすべてのデータテーブルを含むデータセットです。ここで欲しいのは、私のデータセットには、データベーステーブル名と同じ名前を持つすべてのデータテーブルが必要です。出来ますか ?

よろしくお願いします。

4

3 に答える 3

0

TableMappingsforを使用してDataAdapter、正しいテーブル名を取得できます。

using (var con = new SqlConnection(connectionString))
{
   string sql = @"SELECT * FROM locGSP; 
                  SELECT * FROM locCountry; 
                  SELECT * FROM locMarketUnit";
   using(var da = new SqlDataAdapter(sql, con))
   {
       // demonstrate the issue here:
       DataSet dsWrong = new DataSet();
       da.Fill(dsWrong); // now all tables are in this format: Table,Table1,Table2

       // following will map the correct names to the tables
       DataSet dsCorrect = new DataSet();
       da.TableMappings.Add("Table", "locGSP");
       da.TableMappings.Add("Table1", "locCountry");
       da.TableMappings.Add("Table2", "locMarketUnit");
       da.Fill(dsCorrect); // now we have the correct table-names: locGSP,locCountry,locMarketUnit
   }
}

DataReaderと を使用してDataSet.Loadを埋める別の方法を次に示しDataSetます。

using (var con = new SqlConnection(connectionString))
{
   string sql = @"SELECT * FROM locGSP; 
                  SELECT * FROM locCountry; 
                  SELECT * FROM locMarketUnit";
   using (var cmd = new SqlCommand(sql, con))
   {
       con.Open();
       using (var rdr = cmd.ExecuteReader())
       {
           // after the next line the DataSet will have the correct table-names
           ds.Load(rdr, LoadOption.OverwriteChanges, "locGSP", "locCountry", "locMarketUnit");
       }
   }
}

バックグラウンド:

DataAdapter から DataSet を作成する

複数の結果セット: DataAdapter が複数の結果セットを検出した場合、DataSet に複数のテーブルが作成されます。テーブルには、Table0の "Table" で始まる、TableNのインクリメンタルなデフォルト名が与えられます。テーブル名が引数として Fill メソッドに渡される場合、テーブルには、TableName0 の "TableName" で始まる、TableNameN のインクリメンタルな既定の名前が与えられます。

于 2013-01-16T12:54:03.130 に答える
0

ここに、このマッピングに役立つ要点があります。

使用法:

SomeDataSet dt = DataUtil.Fill<SomeDataSet>(
    procedureName: "someSP", 
    connectionString: "yourConnectionString", 
    values: new {
        someValue = 15,
        otherValue = "test",
    },
    mappings: new { 
        Table1: "YourDataSetTable1",
        Table2: "YourDataSetTable2",
    }
);

(最後のコードはフレームワーク 4.0 専用です)

于 2013-01-16T13:04:46.227 に答える
-1

このプロシージャは、テーブルではなく、14 個の結果セットを返します。特に名前を付けない限り、それらは名前のない結果セットです。たとえば、次のクエリのテーブル名は何ですか?

select c.Name,sum(o.orders) as NumOrder,sum(o.price) as TotalPrice
from 
customer c 
join orders o on o.cust_id=c.cust_id
group by c.name

有効な SQL クエリですが、SQL はこの「仮想テーブル」または結果セットを何と呼ぶべきかわかりません。

于 2013-01-16T12:29:27.453 に答える