2017-04-07 313 views
0

我是使用Asp.net MVC5的初學者,我目前在做我的項目。「ExecuteReader:連接屬性尚未初始化。」

它引用「var reader = cmd.ExecuteReader();」 這裏是我的代碼:

public bool IsValid(string username, string password) 
{ 
    string conString = "Server= EJ ; Database=OnlineShopDb ; Integrated Security=SSPI"; 

    SqlCommand cmd = new SqlCommand("Select * from dbo.UserTb where [email protected] and [email protected]"); 
    SqlConnection con = new SqlConnection(conString); 

    cmd.Parameters.AddWithValue("@UserName", SqlDbType.VarChar).Value = username; 
    cmd.Parameters.AddWithValue("@PassWord", SqlDbType.VarChar).Value = password; 
    con.Open(); 
    var reader = cmd.ExecuteReader(); 

    if (reader.HasRows) 
    { 
     reader.Dispose(); 
     cmd.Dispose(); 
     return true; 
    } 
    else 
    { 
     reader.Dispose(); 
     cmd.Dispose(); 
     return false; 
    } 
} 
+1

...? – maccettura

+0

您沒有正確處理您的連接。如果有例外情況呢?現在你正在泄漏資源。瞭解[IDisposable](https://msdn.microsoft.com/en-us/library/system.idisposable(v = vs.110).aspx)模式。 – mason

+0

我想知道未被初始化的Connection屬性是什麼?如果只有大量關於SqlCommand類的文檔可用。可能通過互聯網訪問某處。哇,那太棒了。 – Will

回答

5

裹在using聲明您的連接,然後把它作爲你的SqlCommand構造函數的第二個參數:你在哪裏傳給命令連接

var query = "Select * from whatever"; 
using(var con = new SqlConnection(conString)) 
using(var cmd = new SqlCommand(query, con)) 
{ 
    con.Open(); 
    // etc 
} 
+2

@EjGenito還應該注意的是,一旦您切換到'使用'語句,您將不再需要手動關閉或處理您的連接。它會爲您處理,即使發生未處理的異常。 – mason

+0

非常感謝!有效 –

相關問題