我有一個C#的問題,我有一個SqlDataReader的函數和另一個SqlCommand的類(第一個只是爲了讀取數據庫的值,第二個是INSERT,UPDATE,DELETE ...在同一個數據庫中)。在一個類中有多個SqlDataReader和SqlCommand的問題
問題是,對於代碼的第一部分(登錄),我必須搜索Active Directory中的值(它的工作原理),然後我必須查看用戶是否在我自己的DB中擁有用戶名和密碼(它的工作原理),然後,如果用戶不在數據庫中,那麼我必須創建它並獲取ID,如果它已經創建,那麼我只需要獲取ID。
的問題是,我得到這個消息:
出現InvalidOperationException是 未處理由用戶代碼
已經存在與此命令,誰是 必須先關閉相關聯的打開的DataReader 。
有代碼:
Class.cs:
private static string MyConnectionString = "THIS IS MY CONNECTION";
private SqlConnection MyConnection = new SqlConnection(MyConnectionString);
public SqlCommand MyCommand = new SqlCommand();
public SqlDataReader MyReader = null;
public void DBMyReader(String SqlQuery)
{
if (MyConnection.State != ConnectionState.Open)
MyConnection.Open();
MyCommand.Connection = MyConnection;
MyCommand.CommandText = SqlQuery;
MyReader = MyCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
public void DBMyUpdate(String SqlQuery)
{
if (MyConnection.State != ConnectionState.Open)
MyConnection.Open();
var cmdTest = new SqlCommand();
cmdTest.Connection = MyConnection;
cmdTest.CommandText = SqlQuery;
cmdTest.ExecuteNonQuery();
}
public void DBMyInsert(String SqlQuery)
{
DBMyUpdate(SqlQuery);
}
** Login.aspx.cs:**
MyClass.DBMyReader("SELECT util_codi,util_logi,util_nome FROM Tgep_util WHERE util_logi='"
+ Session["username"].ToString() + "'");
MyClass.MyReader.Read();
if (!MyClass.MyReader.HasRows)
{
MyClass.MyReader.Close();
MyClass.DBMyInsert("INSERT INTO Tgep_util(util_logi,util_nome) "
+ "VALUES ('" + Session["username"].ToString() + "','" + Session["nome"].ToString() + "')");
}
MyClass.DBMyReader("SELECT util_codi,util_logi,util_nome FROM Tgep_util WHERE util_logi='"
+ Session["username"].ToString() + "'");
MyClass.MyReader.Read();
Session["user_id"] = MyClass.MyReader["util_codi"].ToString();
Response.Redirect("FRM_Principal.aspx");
編輯:更新的代碼(現在運作)
嗨,謝謝你的幫助。問題是,如果我關閉閱讀器,我必須開始另一個時間查詢,我不知道它是否非常有效...是否有解決方案tu解決問題只使用classe? – aliasbody 2011-06-09 15:44:24
@aliasbody我剛剛添加了一種方法來更改您的DBMyUpdate函數,以使用不應與現有讀者衝突的新命令。 – Fosco 2011-06-09 15:45:57
直到代碼正常工作之前,不要擔心效率問題。你不想要快速破碎的代碼。 – 2011-06-09 15:46:05