从数据集中提取数据

时间:2012-12-31 08:14:19

标签: c# .net

尊敬的用户

我正在使用数据集提取数据。 我想把值放在文本框中。但价值并未到来。

我有以下代码

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是我的文本框。 它的捕获价值为>&gt;&gt;&gt;&gt;&gt; System.Data.DataRow

错误位于txtCustomerID.Text = ds.Tables[0].Rows[0].ToString();

但我无法理解。 请帮帮我。

2 个答案:

答案 0 :(得分:10)

像这样改变

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行,整行!!不是列值

数据表行在.Net

中为System.Data.DataRow

答案 1 :(得分:2)

您需要选择列:

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

另请注意,您将在循环的每次迭代中覆盖文本框的值。所以你最终得到的是这个文本框中最后一条记录的ID。

此外,您的查询似乎容易受到SQL注入攻击。就个人而言,我建议您使用ORM甚至是普通的旧ADO.NET来抓取DataSet:

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 Name=@Name";
        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();