尊敬的用户
我正在使用数据集提取数据。 我想把值放在文本框中。但价值并未到来。
我有以下代码
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();
但我无法理解。 请帮帮我。
答案 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();