2013-04-24 228 views
0

我想从我的DataBaseOptions类中的此方法访问我的数据库。我正在使用ASP.NET进行Web开发。SelectCommand.Connection未初始化

每当我运行此方法,在另一个类,我得到以下错误:

SelectCommand.Connection is not initialized

而且它说,错误是线40.这是我的代码:

(将本着“ adapter.Fill(DT);”是40行

private string connectionString = "oop_string"; // Global Variable 
private static SqlConnection mycon = new SqlConnection(); // Global Variable 
private static SqlCommand mycmd = new SqlCommand(); // Global Variable 

public void setupConnection() { 
    mycon.ConnectionString = ConfigurationManager.ConnectionStrings[connectionString].ToString(); 
    mycmd.Connection = mycon; 
} 

public bool UserExists(string username, string password) { 
    setupConnection(); 

    mycmd.CommandText = "SELECT user_id FROM users WHERE user_username = @username AND user_password = @password"; 
    mycmd.Parameters.Add("@username", SqlDbType.VarChar).Value = username; 
    mycmd.Parameters.Add("@password", SqlDbType.VarChar).Value = password; 

    DataTable dt = new DataTable(); 
    SqlDataAdapter adapter = new SqlDataAdapter(mycmd); 

    adapter.Fill(dt); 

    if(dt.Rows.Count == 0) { 
     return false; 
    } else { 
     return true; 
    } 
} 

public int getUserID(string username, string password) { 
     setupConnection(); 

     mycmd.CommandText = "SELECT user_id FROM users WHERE user_username = @username AND user_password = @password"; 
     mycmd.Parameters.Add("@username", SqlDbType.VarChar).Value = username; 
     mycmd.Parameters.Add("@password", SqlDbType.VarChar).Value = password; 

     SqlDataReader reader = mycmd.ExecuteReader(); 

     if(reader.Read()) { 
      return Convert.ToInt32(reader["user_id"]); 
     } 

     mycon.Close(); 
     return 0; 
} 

如果我试图把一切从setupConnection();到UserExists()的开始;和getUserID();我得到以下错误:

ConnectionString property has not been initialized.

它现在声称该错误在第51行。“SqlDataReader reader = mycmd.ExecuteReader();”。

我的老师和我都尝试了一切,谷歌,其他同学,老师。我们无法找到解决方案。

+0

确保在setupConnection()方法中添加mycon.Open并添加以下行adapter.SelectCommand.Connection = mycon adapter.Fill(DT)之前;.希望它有帮助 – MMK 2013-04-24 08:06:25

回答

2

你是在代码中的任何地方都没有打开连接。也可以考虑ecnlosing您的命令和实现IDisposable一个using声明

+0

开幕式应该在哪里?我似乎无法找到它的位置。另外,通过添加这个,我得到一个错误,说'ConnectionString'不能被编辑。连接已打开。 – 2013-04-24 08:12:22

+0

@KevinJensenPetersen,你应该尽可能晚地打开连接并尽早关闭连接。对于当前结构,可以在设置连接字符串后打开连接。 – Habib 2013-04-24 08:50:38

0

您还没有打开连接

public void setupConnection() { 
    mycon.ConnectionString = ConfigurationManager.ConnectionStrings[connectionString].ToString(); 
    mycon.Open() 
    mycmd.Connection = mycon; 
} 
0

你将不得不放弃连接对象在执行,你还没有给查询中的对象。

其计算方法如下:

DataTable dt = new DataTable(); 
    SqlDataAdapter adapter = new SqlDataAdapter(mycmd,mycon);