如何通过datatable检查数据库表,并提取数据库表另一列的信息

本文关键字:数据库 信息 一列 提取 datatable 何通过 检查 | 更新日期: 2023-09-27 18:29:11

我试图检查数据库表中是否有包含用户名和好友用户名的行。如果有的话,那么我必须在一个字符串中获取友谊状态,并返回该字符串
这是代码:

string query = "Select * from tblfriend where username = '" + username + "'and friend = '" + friendname + "'";
SqlCommand cmd = new SqlCommand(query, con);
SqlDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
rows = dt.Rows.Count;
if (rows > 0)
{
    friendship = reader["friendshipstatus"].ToString();
}

但它给出了一个错误信息:

读取器关闭时调用元数据的调用无效。你们能给个提示吗?

如何通过datatable检查数据库表,并提取数据库表另一列的信息

由于您正在从同一个读取器加载DataTable,因此它可能在加载完成后关闭。

作为Side节点,您最好使用参数、使用语句等,如下面的

string queryString = "Select [friendshipstatus] from [tblfriend] where [username] = @username and [friend] = @friend";
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(queryString, connection))
{
    command.Parameters.AddWithValue("@username", username);
    command.Parameters.AddWithValue("@friend", friendname );
    connection.Open();
    using (SqlDataReader reader = command.ExecuteReader())
    {
        if(reader.Read()) // you have matching record if this condition true 
        {
            friendship = reader.GetString(0); // get the value of friendshipstatus 
        }
    }
}

您正在使用读取器来填充数据表,然后当它已经用于填充数据表时,请尝试再次使用它。

有更好的方法可以从数据库中检索单个值(查找ExecuteScalar),但要使当前代码正常工作,请将最后一行替换为

friendship = dt.rows[0].["friendshipstatus"].ToString()

这将从您填充的数据表而不是关闭的读取器中获取数据。

如果您想将数据读取到表中,则应该使用dataadapter

DataTable dt = new DataTable();
// Create new DataAdapter
using (SqlDataAdapter a = new SqlDataAdapter(query, con))
{
   // Use DataAdapter to fill DataTable     
   a.Fill(dt);
   // read data here
}
rows = dt.Rows.Count;
if (rows > 0)
{
     friendship = dt.Rows[0]["friendshipstatus"].ToString();
}