PDA

View Full Version : مبتدی: Invalid attempt to call Read when reader is closed.



noth50
دوشنبه 23 بهمن 1391, 17:43 عصر
درود
من زمانی که میخواهم به دیتابیس وصل بشم با پیغام Invalid attempt to call Read when reader is closed روبرو میشم.
اگر بتوان راهنمایی کرد که چه زمانی دیتابیس را باز و بسته کنم فکر کنم مشکلم برطرف میشه.
public class AddUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmailAddress { get; set; }
public string UserName { get; set; }

public static List<AddUser> GetID(int getid)
{
DataAccessLayer.AddFirstUsers users = new DataAccessLayer.AddFirstUsers();
IDataReader dr = users.GetID(getid);
List<AddUser> userlist = new List<AddUser>();
while(dr.Read())
{
AddUser adduser = new AddUser();
adduser.FirstName = dr["FirstName"].ToString();
adduser.LastName = dr["LastName"].ToString();
userlist.Add(adduser);
}
return userlist;
}
}


public SqlDataReader GetID(int UserId)
{
return ExecuteReader("Data Source =(Local);Initial Catalog=Users;Integrated Security=True;",
"GetId", CommandType.StoredProcedure, new SqlParameter[]
{
new SqlParameter("@UserId",UserId)
});
}
باتشکر

noth50
دوشنبه 23 بهمن 1391, 18:30 عصر
من تمامی کانکشن ها مو فقط باز کردم و مشکلم برطرف شد. این روش کار درستی نیست اگر امکانش باشه روش درست را درج بفرمایید.
public class BaseClass
{
public int ExecuteNoneQuery(string ConnectionString, string CommandText, CommandType commandType, params SqlParameter[] parameter)
{
SqlConnection ObjCon = new SqlConnection(ConnectionString);
SqlCommand ObjCom = new SqlCommand();
ObjCom.Connection = ObjCon;
ObjCom.CommandText = CommandText;
ObjCom.CommandType = commandType;
ObjCom.Parameters.AddRange(parameter);
ObjCon.Open();
int retVal = ObjCom.ExecuteNonQuery();
//ObjCon.Close();
return retVal;
}
public static string ExecuteScaler(string connectionstring, string commandcext, CommandType commandtype,params SqlParameter[] parameter)
{
SqlConnection ObjCon = new SqlConnection(connectionstring);
SqlCommand ObjCom = new SqlCommand(commandcext, ObjCon);
ObjCom.CommandType = commandtype;
ObjCom.Parameters.AddRange(parameter);
ObjCon.Open();
string retval = ObjCom.ExecuteScalar().ToString();
//ObjCon.Close();
return retval;
}
public static SqlDataReader ExecuteReader(string ConnectionString, string CommandText, CommandType commandtype, SqlParameter[] parameter)
{
SqlConnection ObjCon = new SqlConnection(ConnectionString);

SqlCommand ObjCom = new SqlCommand();
ObjCom.Connection = ObjCon;
ObjCom.CommandType = commandtype;
ObjCom.CommandText = CommandText;
ObjCom.Parameters.AddRange(parameter);
ObjCon.Open();
SqlDataReader retval = ObjCom.ExecuteReader(CommandBehavior.CloseConnecti on);
//ObjCon.Close();
return retval;
}
}

Amir.pc_66
دوشنبه 23 بهمن 1391, 19:50 عصر
دوست گرامی وقتی دستور Execute و یا Fill رو میزنی قبلش open و بعدش هم close

موفق باشین