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();

但我无法理解。请帮我。

4

2 回答 2

11

像这样改变它

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中

于 2012-12-31T08:22:42.240 回答
3

您需要选择列:

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 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();
于 2012-12-31T08:20:12.960 回答