1

問題があります。ストアドプロシージャに2つのクエリがあります。条件がtrueの場合、両方とも特定の条件で実行されます。クエリ1が実行され、3つのテーブルから7つの列が返されます。条件が失敗した場合、2番目のクエリは4列を返します。

フロントエンドでは、データテーブルを使用してクエリ結果を保存します。datatableからテキストボックスに値を割り当てます。

お気に入り

dtはデータテーブル名です

Txt_name.Text=dt.Rows[0][6].ToString();

問題は、2番目のクエリを実行するとエラーが発生することです。6には列がありません。

dtにインデックス6の列があるかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

2

このコードを試してください

 int indx = 6;
 if(dt != null and dt.Columns.Count > indx)
 {
     Txt_name.Text=dt.Rows[0][indx].ToString();
 }
于 2012-08-11T10:27:45.760 に答える
1

以下のような列数を確認できます。

int index = 6;
Txt_name.Text = dt.Columns.Count > index ? dt.Rows[0][index].ToString() : String.Empty;
于 2012-08-11T07:48:23.193 に答える
0

ストアド プロシージャを変更するためのアクセス権がありますか? また、このストアド プロシージャを使用するすべてのリソースを管理しますか? 結果に関係なく、同じ構造を返すことをお勧めします。

偽の結果がある場合は、追加のフィールドを空にしてください。これは、 NULL がある場合 (つまり、結合されたテーブルにレコードがない場合)、(空の文字列の場合のように)COALESCE指定された値を返す演算子を使用して実現できます。''

フィールド数に基づいて異なる動作をする関数は、将来コードを壊すための保険としてほぼ機能します。if-else-clause の動作を反転させるか、常に同じ結果を評価できる魔法の数字「6」があります。ストアド プロシージャが異なる構造を返す必要がある場合は、最初に true/false を評価してから、適切なストアド プロシージャを呼び出します。

于 2012-08-11T08:15:05.073 に答える