使用ADO.NET什么时候需要加上con.Open()啊?
SqlConnection con = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["carConnectionString"].ToString());
{
string cmd1 = "select * from powers where username='"+username+"' and power=1";
SqlDataAdapter da = new SqlDataAdapter(cmd1, con);
DataSet ds = new DataSet();//创建数据集
da.Fill(ds);//填充数据集
DataTable dt = ds.Tables[0];
if (dt.Rows.Count ==0)
{
Response.Write("<script LANGUAGE='javascript'>alert('您没有权限使用该功能!');window.close();</script>");
}
cmd1 = "select * from works where username='" + username +"'";
da = new SqlDataAdapter(cmd1, con);
ds = new DataSet();//创建数据集
da.Fill(ds);//填充数据集
dt = ds.Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
Label lb = new Label();
lb.Text = dt.Rows[i]["wcontain"].ToString().Trim();
lb.CssClass = "lbs";
lb.Attributes.Add("ondblclick", "justtest()");
lb.ID = dt.Rows[i]["wid"].ToString().Trim();
this.Panel1.Controls.Add(lb);
}
}
------------------------------------------------
像我上面的代码使用起来完全没问题,可是我完全没加入con.Open()语句啊,这样不是数据库没连接上么?为何打开网页却能正确的查找到和显示出数据库里的数据?求指教啊谢谢
话说有人说貌似fill函数会判断数据库连接,如果没有打开会自动打开,是因为这样么???
------解决方案--------------------构造函数的时候已经分配了连接字符串,SqlDataAdapter会创建数据库连接,如果是SqlConnection对象则直接使用传入的SqlConnection,SqlDataAdapter会自动打开和关闭的.
至于关闭,msdn说是保持使用之前的状态,如果使用之前已经打开,那么数据填充完成后也是打开状态,不会自动关闭。
------解决方案--------------------da.Fill时会连接
Fill 方法使用 SELECT 语句从数据源中检索数据。与 Select 命令关联的 IDbConnection 对象必须有效,但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭,则将其打开以检索数据,然后再将其关闭。如果调用 Fill 之前连接已打开,它将保持打开状态。
------解决方案--------------------Fill方法会判断数据连接的状态,如果没有打开会自动打开,Fill完后Close掉;如果原先打开则直接Fill,然后保持打开状态.
类似的还有Update方法。
------解决方案--------------------用DATAADAPTER时,它会默认OPEN
其它都要手动代码打开