看视频看到了这么一段代码public class sqlHelper
{
public sqlHelper()
{
//
//TODO: 在此处添加构造函数逻辑
//
}    public static int SqlExecuteNonQuery(string sql, params SqlParameter[] paras)
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString))
        {
            conn.Open();
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sql;//清除旧有内容
                foreach (SqlParameter para in paras)
                {
                    cmd.Parameters.Add(para);
                }
                return cmd.ExecuteNonQuery();
            }
        }
    }
}这个清除旧有内容是什么意思呢我是菜鸟,不是很懂,测试了一下,两个文本框,输入,一个按钮,插入,第二个按钮,看cmd是否有内容输出
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (txtpid.Text == "")
        {
            return;
        }
        SqlParameter[] paras = new SqlParameter[]{
            new SqlParameter("@pid", Convert.ToInt32(txtpid.Text)),
            new SqlParameter("@pro", txtpro.Text)
        };
        string sql = "insert into Provincial(pid,Provincial) values(@pid,@pro)";
        Response.Write(sqlHelper.SqlExecuteNonQuery(sql, paras));
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString))
        {
            conn.Open();
            using (SqlCommand cmd = conn.CreateCommand())
            {
                if (cmd.CommandText == "")
                {
                    Response.Write("空值");
                }
                else
                {
                    Response.Write(cmd.CommandText);
                }
            }
        }
    }文本框输入文字,点击按钮插入,这样cmd应该有内容了,可是点击第二个按钮,却出来空值,我迷惑了这连接是啥意思啊,从输出结果来看,第二个按钮,应该是打开了第二个连接,都是连接相同的数据库,怎么区分两个连接是不相同的呢,还有,同一个连接,那上面的清除旧有内容是什么意思呢,怎么知道是同一个连接啊
用 using,视频说连接完了就自动释放了,什么是连接完了呢?

解决方案 »

  1.   

    应该是原来的代码是重用command对象,然后改过来的。这是微软企业库早期版本的SqlHelper的源码,网上可以找到下载。
      

  2.   

    ado.net 支持连接池,用using执行完代码后,连接就关闭了,其他的代码还可以利用这个连接。相当于手工调用了一下Conn.Close()方法。
      

  3.   

    第二个按钮if (cmd.CommandText == "")
      {
      Response.Write("空值");
      }
      else
      {
      Response.Write(cmd.CommandText);
      }
      

  4.   

    cmd.CommandText = sql;//清除旧有内容
    这个注释写错了啦 lz也理解错了
    CommandText是要执行的sql脚本  可以获取或设置它的值什么清除旧内容哦还有在using内的代码,只要出了using的范围,系统就会自动释放using内的资源