2013-04-24 222 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);