C# 之 ADO.NET数据库操作连接模式

连接模式,一般是四大对象

SqlConnectionn         

SqlCommand        #通过SQL操作的对象

SqlParameter         #防止SQL注入而使用的参数化SQL语句,配合SqlCommand (可以不用)

SqlDataReader       #如何SqlCommand执行的是查询语句,这个是获取的结果集对象

 

如下

/* 以下使用连接模式 */
        SqlConnection cnn = new SqlConnection(strCnn);
        SqlCommand cmd = new SqlCommand();   // 有重载构造函数,如 SqlCommand(string sql, SqlConnection cnn)
        cmd.Connection = cnn;
        cmd.CommandText = "insert into StudInfo values(@StuNo, @Name, @Birth, @MajorId, @Image)";

        // 使用SqlParameter为SqlCommand对象准备参数
        SqlParameter stuNoParam = new SqlParameter();
        SqlParameter nameParam = new SqlParameter();
        SqlParameter birthParam = new SqlParameter();
        SqlParameter majorParam = new SqlParameter();
        SqlParameter imageParam = new SqlParameter();

        // 设置SqlParameter对象指向对应参数
        stuNoParam.ParameterName = "@StuNo";
        nameParam.ParameterName = "@Name";
        birthParam.ParameterName = "@Birth";
        majorParam.ParameterName = "@MajorId";
        imageParam.ParameterName = "@Image";

        // 给参数赋值
        stuNoParam.Value = StuNo.Text.Trim();
        nameParam.Value = Name.Text.Trim();
        birthParam.Value = Birth.Text.Trim();
        majorParam.Value = MajorId.Text.Trim();
        imageParam.Value = Image.FileName.Trim();

        // 将SqlParameter对象绑定到SqlCommand对象下
        cmd.Parameters.Add(stuNoParam);
        cmd.Parameters.Add(nameParam);
        cmd.Parameters.Add(birthParam);
        cmd.Parameters.Add(majorParam);
        cmd.Parameters.Add(imageParam);

        // 打开连接执行
        try
        {
            cnn.Open();
            cmd.ExecuteNonQuery();
            Label2.Text = "提交成功";
            cnn.Close();
            
        }
        catch (Exception ex)
        {
            // 
        }

 

包括SqlDataReader的

string strCnn = ConfigurationManager.ConnectionStrings["StudentCnnString"].ConnectionString;
        SqlConnection cnn = new SqlConnection(strCnn);
        
        SqlCommand cmd = new SqlCommand();
        SqlCommand cmd2 = new SqlCommand();
        cmd.Connection = cnn;
        cmd2.Connection = cnn;
        cmd.CommandText = "select * from StudInfo";

        SqlDataReader stuReader = null;
     

        
        try
        {
            if (cnn.State == ConnectionState.Closed)
                cnn.Open();
            stuReader = cmd.ExecuteReader();
            Response.Write("");

            // 输出表格所有字段
            for (int i = 0; i < stuReader.FieldCount; i++)
            {
                Response.Write("");
            }

            Response.Write("");

          

            // 输出记录
            while (stuReader.Read())
            {
                Response.Write("");

                // 输出前面的信息
                int j;
                for (j = 0; j < stuReader.FieldCount-1; j++)
                {
                    Response.Write("");
                }
                /* 以下冲突报错 DataReader,
                // 从数据表Major获取专业名字,索引是stuReader.GetValue(j)
                int num = (int)stuReader.GetValue(j);
                //stuReader.Close();
                cmd2.CommandText = "select MajorName from Major where MajorId = " + num;
                string majorName = (string)cmd2.ExecuteScalar();
               
                Response.Write("");
                */
                //stuReader.Open();
                
                // 从数据库的数据表获取图片名字
                string imageUrl = (string)stuReader.GetValue(j);

                // 输出图片
                Response.Write("");

                Response.Write("");
            }
            Response.Write("
" + stuReader.GetName(i) + "
" + stuReader.GetValue(j) + "" + majorName + "
"); } catch(Exception ex) { Response.Write("失败:" + ex.Message); } finally { if(stuReader.IsClosed == false) stuReader.Close(); if(cnn.State == ConnectionState.Open) cnn.Close(); }

在同一个连接对象cnn下,在使用了一个SqlCommand对象获取到的结果集合对象SqlDataReader的操作里面,再创建使用一个新的SqlCommand对象报错。不给用。。原因是连接模式下,一次cnn.Open()和cnn.Close()之间只能执行一条cmd指令,想多次就需要多次开关

你可能感兴趣的:(C#/C++,开发,ASP.NET,开发)