2017-04-07 320 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

非常感谢!有效 –

相关问题