类中的方法
- C# code
public SqlDataReader Dr(Dictionary<string,string> parms,string ctext) { SqlConnection con = this.Dbcon(); SqlCommand cmd = new SqlCommand(ctext,con); foreach (KeyValuePair<string, string> kv in parms) { cmd.Parameters.AddWithValue(kv.Key,kv.Value); } con.Open(); SqlDataReader dr = cmd.ExecuteReader(); con.Close(); return dr; }
页面中的调用
- C# code
Cldb cldb=new Cldb(); Dictionary<string, string> parmsRead = new Dictionary<string, string>(); parmsRead.Add("@UserName", strUsername); SqlDataReader da = cldb.Dr(parmsRead, sql2); while (da.Read()) { UserID = da.GetGuid(0); }
这样写会报错Invalid attempt to call Read when reader is closed.想问一下高手怎么修改呢?我主要是想把数据库调用放到类中,但是类中不出现类似
UserID = da.GetGuid(0);这样的特殊代码,以便于日后在其他程序里继续调用,所以UserID = da.GetGuid(0);这样的代码只能写在页面中.
------解决方案--------------------------------------------------------
一般返回dataset或者datatable就好了,因为它们是离线的数据集
而reader你要控制连接的关闭,类里先关了用不了,调用的时候再关又不好。
------解决方案--------------------------------------------------------
- C# code
public SqlDataReader Dr(Dictionary<string,string> parms,string ctext){ SqlConnection con = this.Dbcon(); SqlCommand cmd = new SqlCommand(ctext,con); foreach (KeyValuePair<string, string> kv in parms) { cmd.Parameters.AddWithValue(kv.Key,kv.Value); } con.Open(); SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//当关闭DataReader时自动关闭Connection // con.Close();不能关闭 return dr;}
------解决方案--------------------------------------------------------
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
这样就可以了, 返回dataset,datable,dr,用到那个返回那个。