2012-12-31 77 views
0

尊敬的用戶,從數據集提取數據

我正在使用數據集提取數據。 我想把價值放在文本框中。但價值不在。

我有以下代碼

try 
      { 
       da = new SqlDataAdapter("select ID from Customer where Name='" + gvBkPendingSearch.SelectedRows[0].Cells[1].Value.ToString() + "'",con); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 
       for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
        txtCustomerID.Text = ds.Tables[0].Rows[0].ToString(); 
      } 
      catch (Exception ex) 
      { 

      } 
      finally 
      { 
      } 

txtCustomerID是我的文本框中。 它獲取價值爲>>>>>的System.Data.DataRow

錯誤是txtCustomerID.Text = ds.Tables[0].Rows[0].ToString();

但我不能夠理解它。 請幫幫我。

+0

你得到一個錯誤?或異常? –

+1

它顯示我在我的文本框中的System.Data.DataRow [txtCustomerID.Text] – Freelancer

+0

你把它放在'for'循環中,但你不使用計數器變量? –

回答

8

改變它像這樣

for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
    txtCustomerID.Text = ds.Tables[0].Rows[i]["ID"].ToString(); 

你正在做的錯誤是,你要訪問這個

ds.Tables[0].Rows[0].ToString(); 

表示第0排,整排!不列值

而數據錶行System.Data.DataRow在.net

2

您需要選擇列:

txtCustomerID.Text = ds.Tables[0].Rows[i][0].ToString(); 

另外請注意,您在每次循環覆蓋文本框的值。所以你最終會得到的是這個文本框中最後一條記錄的ID。

此外,您的查詢似乎很容易受到SQL注入。我個人建議你贊成ORM甚至是普通的老ADO.NET的刮數據集:

public static IEnumerable<int> GetIds(string name) 
{ 
    using (var conn = new SqlConnection("Your connection string comes here")) 
    using (var cmd = conn.CreateCommand()) 
    { 
     conn.Open(); 
     cmd.CommandText = "select ID from Customer where [email protected]"; 
     cmd.Parameters.AddWithValue("@Name", name); 
     using (var reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       yield return reader.GetInt32(reader.GetOrdinal("ID")); 
      } 
     } 
    } 
} 

現在你可以愉快地使用此功能:

string name = gvBkPendingSearch.SelectedRows[0].Cells[1].Value.ToString(); 
int id = GetIds(name).FirstOrDefault(); 
txtCustomerID.Text = id.ToString();