【发布时间】:2011-06-10 00:25:24
【问题描述】:
我有一个 C# 问题,我有一个类,其中一个函数用于 SqlDataReader,另一个用于 SqlCommand(第一个仅用于从数据库读取值,第二个用于 INSERT、UPDATE、DELETE ...相同的数据库)。
问题是,对于代码的第一部分(登录),我必须从 Active Directory 中搜索值(它有效),然后我必须查看用户在我自己的数据库中是否有用户名和密码(它有效),然后,如果用户不在数据库中,那么我必须创建它并获取 ID,如果它已经创建,那么我只需要获取 ID。
问题是我收到了这条消息:
InvalidOperationException 是 用户代码未处理
已经存在一个 Open 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");
编辑:更新代码(目前可用)
【问题讨论】:
标签: c# sql-server class sqldatareader