2016-05-27 11 views
0

によってDataTableの別の列と同じ名前である、それは同じ名前を持つ2つの列があります。NAME_PROJECT、それは私がSQL Serverのストアドプロシージャを呼び出してからdataTableの取得を持っているC#

例:このクエリの結果:

SELECT 
    NAME_PROJECT, 
    DATE, 
    ... 
    NAME_PROJECT, 
    ... 
FROM 
    TABLE_A 

これは、C#での私のコードで、それは常に最初の列の値を取得:いくつかの理由は、私は、キーを変更することはできませんので

dataTable.Rows[i].Field<string>("NAME_PROJECT") 

「をNAME_PROJE CT "をSQLから削除して、同じ名前の列を回避します。

この問題で2番目のNAME_PROJECT列の値を取得する方法はありますか?

ありがとうございます!

+0

さらに詳しい情報をご提供ください。おそらく問題のストアドプロシージャですか?あなたが変更しようとしているすべてのSQLエラー?私は非常に興味がありますなぜあなたはクライアント側でうまく設計されたDBと戦うよりも、データベース側でこの問題を解決することができません –

+0

このストアプロシージャは別の機能で使用されたので、今、このストアプロシージャを呼び出して値を取得する新しい出力データ関数を作成しています。 したがって、私はこのストアプロシージャを編集することはできません。私はC#でしかカスタマイズできません。 別の解決策がありますか?ありがとう –

答えて

0

Fieldは、列インデックスを受け入れるためにオーバーロードされています。この場合、インデックスを渡すことができます。

dataTable.Rows[i].Field<string>(2); 

更新:

あなたが重複する列名がある場合に、第2の列をしたいので、私はこれを行うことを示唆しています。

var column = dataTable.Columns 
         .OfType<DataColumn>() 
         .LastOrDefault(x=> x.ColumnName == "columnname"); 

if(column != null) 
{ 
    dataTable.Rows[i].Field<string>(column); 
} 
+0

ありがとう、 このストアプロシージャは100以上の列を持ち、固定されていません。出力列は、表示列を有効または無効にすることができる環境パラメーターによって制御されています。インデックスの列に基づいて、今後のエラーを避けることは困難です。別の解決策がありますか? –

+0

うーん...タフな状況ですが、重複がある場合に2番目の列を取る場合はこれですか? –

+0

>重複がある場合は2番目の列にしますか? はい、T_T –

0

ストアドプロシージャによって返された結果セットが

+0

何らかの理由で何らかの理由でキーを変更できません "NAME_PROJECT _ –

+0

@HariPrasadエイリアスが変更されていません –

+0

"彼はdb側で変更できません "と思っています –

0

一つの解決策を選択するためのインデックスを使用することである重複する列名の問題を持っていないように、あなたはあなたのクエリで重複する列名のいずれかをエイリアスができあなたが必要とする列。

string Second_Name_Porject = dataTable.Rows[i].ItemArray[2]; 
関連する問題