2012-03-03 157 views
3

我正在使用由程序創建的數據表。在這個數據表中,我想插入一些指定列中的值。datatable選擇行

起初我將離開其餘列空,當我查詢的數據表,在Primary列最近插入的值來更新同一行的主鍵值,我面對錯誤Missing operand after ID operator

任何一個能告訴我確切的問題。

我想下面的代碼:

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

而且entring主要價值後的表結構如下。

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

如果在所有的選項,你可能想看看[LINQ的(http://stackoverflow.com/questions/10855/linq-query-on -a-數據表)。 – R0MANARMY 2012-03-03 07:02:25

回答

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 2012-03-03 07:09:33

+0

@Pramod - 請參閱我的更新的例子。你的列需要強類型化,而Where()方法需要一個相同類型的泛型參數。 – 2012-03-03 07:17:47

+0

Thanx它的工作..如何將它轉換爲數據行?@ Tim – Pramod 2012-03-03 07:25:15

1

您的過濾器中不需要' '

我認爲這應該工作:

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

我試過了,但仍然一樣獲取錯誤@gideon – Pramod 2012-03-03 07:02:00

1

順便說一句,參考System.Data.DataSetExtensions

2

你可以簡單地格式化選擇字符串,如下圖所示:

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

隨時讓我知道這是否適用於你..謝謝

+0

我認爲這是最好的解決方案 – Esi 2017-08-14 07:32:06

0

如果你正在尋找一個特定的行,你的數據表有一個主鍵,你可以使用查找方法和目標的主鍵,將返回只是你想,而不是一個數組行:

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; 
}