2012-03-03 14 views
3

プログラムで作成したデータテーブルを使用しています。このデータテーブルでは、指定されたいくつかの列に値を挿入したいと考えています。私は同じ行を更新するには、プライマリ列に最近挿入された値を持つデータテーブル照会していたときにデータテーブル選択行

当初、私は、ヌル残りの列を残して、主キーの値を挿入しています、私はエラーMissing operand after ID operator

に直面していますいずれかが私に正確な問題を伝えることができます。

私は、次のコードをしようとしています:以下のように主要な価値があるentring後

dt.Rows.Add(1); 
int insertedValue = 1; 
DataRow[] dr = dt.Select("ID = '" + insertedValue.toString() + "'"); 

そして、テーブル構造を。

ID Volumn1 Volumn2 volumn3 
-------------------------------------- 
1 
+1

すべてのオプションでは、[LINQの](http://stackoverflow.com/questions/10855/linq-query-onを見てみたいことがあり場合-a-datatable)。 – R0MANARMY

答えて

9

あなたはLINQをもっときれいにこれを行うと、この強く型付けされた操作することができます。

何かのように:

dt.Rows.Add(1); 
int insertedValue = 1; 
var result = 
     dt.AsEnumerable().Where(dr => dr.Field<int>("ID") == insertedValue); 

の作業例:

DataTable dt = new DataTable(); 
dt.Columns.Add("ID", typeof(int)); 
dt.Rows.Add(1); 

var result = dt.AsEnumerable().Where(dr => dr.Field<int>("ID") == 1); 
+0

私は上記のコードで試しましたが、この時点で私はvarプロパティのプロパティを見ることができます "指定されたキャストは有効ではありません" @Tim Medora – Pramod

+0

@Pramod更新された例。列の型を厳密に指定する必要があり、Where()メソッドには同じ型の汎用パラメーターが使用されます。 –

+0

Thanxそれはどうでしたか?それをdatarowに変換する方法は?@ Tim – Pramod

1

フィルタに' 'は必要ありません。

私は、これは動作するはずだと思う:

DataRow[] dr = dt.Select("ID = " + insertedValue.toString()); 
+0

私は試みましたが、同じ取得エラー@ gideon – Pramod

1
ところで

、あなたは単に選択文字列の書式を設定でき

2

参照System.Data.DataSetExtensions下図のように:

DataRow[] dr = dt.Select(string.Format("ID ='{0}' ", insertedValue)); 

あなたのためにこれが働くかどうかお気軽にお知らせください。ありがとう

+0

これは最適な解決策だと思います – Esi

0

特定の行を探していて、プライマリキーがある場合は、Findメソッドを使用して、あなたがしたい行ではなく、配列:

DataRow foundRow = dt.Rows.Find([INSERT SEARCH PARAMETER HERE]); 
if(foundRow != null) 
{ 
    TO SET A STRING EQUAL TO A FOUND VALUE: 
    string str = foundRow["COLUMN NAME/INDEX]; 

    OR IF YOU ARE INSERTING A VALUE YOU CAN USE IT LIKE THIS: 
    foundRow["COLUMN NAME/INDEX"] = NEW VALUE; 
} 
関連する問題