2013-08-27 23 views
1

我試圖檢查數據庫表中是否有任何有用戶名和朋友用戶名的行。如果有的話,我必須在字符串中取得友誼狀態並返回該字符串。
下面是代碼:如何通過數據表檢查數據庫表並提取另一列數據庫表的信息?

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

但是它給出了一個錯誤信息:

非法呼叫調用元數據時,讀取器已關閉。 你們能給我們一個提示嗎?

回答

0

由於您使用同一個閱讀器加載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 
     } 
    } 
} 
+0

非常感謝你它的工作,您應該使用的DataAdapter。 –

0

您正在使用的閱讀器時,它已經被用於該填充數據表,然後 - 嘗試使用它再次。

有更好的方法來從數據庫中檢索單個值(查找的ExecuteScalar),而是爲了讓自己目前的工作代碼替換最後一行與

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

這會從數據表中獲取數據,你而不是封閉的閱讀器。

0

,如果你想將數據讀入表

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(); 
} 
相關問題