2011-01-18 4 views
0

私は約5テーブルを返すストアドプロシージャを持っていると私はこのように彼らに何かを返しています:ストアドプロシージャからテーブル名を認識するDataSetを取得する方法?

select <fields> from Products where ProductId = @ProductId 
select <fields> from RelatedProducts where ProductId = @ProductId 
select <fields> from MetaData where ProductId = @ProductId 

がよく、あなたが要点を得ます。今データセットで、私が行う場合は、この:

DataSet ProductDs = DAL.RetreiveProductMetadata(someInteger); 

ProductName = DataSet.Tables["Products"].Rows[0]["columnName"].ToString(); 

その例外を投げて...よく、テーブル名がnullとデバッグ時であるというエラーが、結局のところ、テーブル名が実際に「Results1」と命名され、 "結果2"など。

select * From products AS Products 

効果なし:

私はにストアドプロシージャを変更することを試みました。

データベースからテーブル名を検出して使用するにはどうすればよいですか?

ps:私はあらゆる種類のCoalescesとケースをフィールドに持っていますが、問題はないでしょうか?
また、グーグルと叩いてみました。

+0

intを使用してテーブルのインデックスを作成しようとするとどうなりますか? – dandan78

+0

それは当然のことですが、名前でアクセスしようとしている私の主張は、純粋に読みやすさのためです。テーブル[0]と[1](または他のコーダー – iamserious

+0

別のちょっとばかげた質問:テーブル名を小文字で入力しようとしましたか?私は過去に同様の問題を抱えていたことを覚えていますが、大文字と小文字の区別について何かを思い起こさせるようですが、私はそれらをどのように解決したのかはよく分かりません – dandan78

答えて

2

できません。クエリには多くのテーブルが含まれる可能性があるため、結果セットにテーブル名は意味を持ちません。

をご存知でしょうか。結果セットがテーブル名を派生している必要があります。

そうでない場合は、

select 'Products' AS ThisTable, <fields> from Products where ProductId = @ProductId 

それとも最初のJOINと後で

を選択解除またはに従ってあなたdataset.xsdなどアップフロントとマップを定義します。

+0

はい、私の結果セットはどうなっているのか分かりますが、次の男は自分のコードを見やすくしました。ああ、もし私に余分な仕事を与えたら、生産性を上げて進んでください!ありがとう! – iamserious

+0

@iamserious:これがリポジトリまたはDALの場合、DataTableをより高いレベルのコードに非表示にすることができます。私たちは、procsから複数の結果セットを使用しますが、あなたが問題であると報告した問題を決して考えなかった... – gbn

+0

あなたはそれを拡張してください。私のDALには、強く型付けされたデータセットはほとんどなく、ストアドプロシージャを実行して結果を返すクラスファイルがあるので、テーブルアダプタに実際に収まらないストアドプロシージャはほとんどありません。どのようにコードを介してアクセスしますか? – iamserious

1

データセットから名前でテーブルを取得する唯一の方法は次のとおりです。あなたはそれに名前を付ける場合は、アダプタから充填するか、手動で一度、後で1台それらに名前を付けるとき:あなたがアクセスしたときに、今

adapter.fill(dataset, "nameoftable") 

あなたは名前でアクセスすることができます。 ds.tables("nameoftable").rowsなど

または後で名前を付けます。

_ds.tables(0).tablename = "nameoftable" 
3

それはあなただけで何のデータが、テーブル名を含むテーブル構造に関する情報が含まれていないこれ、最初のテーブルのスキーマをロードする必要があり、実際には可能です:

adapter.FillSchema(dataset, SchemaType.Source); 
adapter.Fill(dataset); 

は、このクエリでは動作しませんようですあなたがMS Accessで使うかもしれないようなデータベースに含まれていますが、それは通常のテーブルの仕事をします。

関連する問題