【问题标题】:How do i check database table through datatable and extract information of another column of database table?如何通过datatable检查数据库表并提取数据库表另一列的信息?
【发布时间】:2013-08-27 04:29:25
【问题描述】:

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

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

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

阅读器关闭时调用元数据的调用无效。 各位大神能指点一下吗?

【问题讨论】:

    标签: c# sql sql-server datatable


    【解决方案1】:

    由于您是从同一个阅读器加载 DataTable,它可能会在加载完成后关闭。

    作为侧节点,你最好使用参数,使用语句等,如下所示

    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 
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        如果你想将数据读入表中,你应该使用 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();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多