zoukankan      html  css  js  c++  java
  • ADO.NET五大对象增删改查使用

                string ConnStr = "Data Source=.;Initial Catalog=ADO_DEMO;Integrated Security=True";
    
                #region SqlConnection使用
                //第一步:新建SqlConnection对象
                SqlConnection SqlConn = new SqlConnection();
                
                //设置SqlConnection对象的连接字符串;
                SqlConn.ConnectionString = ConnStr;
    
                //如果用DataSet或者DataTable,可以不用打开数据库,否则必须打开数据库
                SqlConn.Open();
                #endregion
    
                #region SqlCommand对象的增、删、改操作
                //新建SqlCommand对象
                SqlCommand cmd = new SqlCommand();
    
                //设置SqlCommand对象的Connection属性,即:SqlConn(SqlConnection类型的对象)
                cmd.Connection = SqlConn;
    
                //如果是执行INSERT/UPDATE/DELETE的SQL语句,可以直接设置CommandText属性
                //如果是执行存储过程,则必须设置CommandType属性为CommandType.StoredProcedure
                cmd.CommandText = "INSERT INTO Ex_Class VALUES('1707A',19)";
    
                //设置完Connection属性及CommandText属性后可以直接执行SQL语句
                //cmd.ExecuteNonQuery();
    
                //执行完成后要关闭数据库,并且释放资源
                SqlConn.Close();
                SqlConn.Dispose();
                #endregion
    
                #region 利用SqlCommand对象和SqlDataReader对象获取数据(记录集)
                //判断如果连接没有打开,是关闭状态,就打开数据库
                if(SqlConn.State == ConnectionState.Closed)
                {
                    SqlConn.ConnectionString = ConnStr;
                    SqlConn.Open();
                }
                
                //新建SqlCommand对象
                SqlCommand cmd_select = new SqlCommand();
    
                //设置SqlCommand对象的Connection属性,即:SqlConn(SqlConnection类型的对象)
                cmd_select.Connection = SqlConn;
    
                //如果是执行INSERT/UPDATE/DELETE的SQL语句,可以直接设置CommandText属性
                //如果是执行存储过程,则必须设置CommandType属性为CommandType.StoredProcedure
                cmd_select.CommandText = "SELECT * FROM Ex_Class";
    
                //调用ExecuteReader方法并用SqlDataReader对象接收返回的记录;
                SqlDataReader sdr = cmd_select.ExecuteReader();
    
                //如果SqlDataReader返回的只有一条记录,可以用下面的方法来获取;
                if(sdr.Read())
                {
                    string ClassName = sdr["ClassName"].ToString();
                    int ClassCount = Convert.ToInt32(sdr["ClassCount"]);
    
                    Response.Write(string.Format("SqlDataReader返回一条记录:ClassName:{0} ClassCount:{1}<br><br>", ClassName, ClassCount));
                }
    
                //如果SqlDataReader返回的是多条记录,可以用下面的方法来获取记录,并存储集合
                List<Model> DataList = new List<Model>();
                while(sdr.Read())
                {
                    Model m = new Model();
                    m.ClassName = sdr["ClassName"].ToString();
                    m.ClassCount = Convert.ToInt32(sdr["ClassCount"]);
                    DataList.Add(m);
                }
    
                //然后可以使用集合中的数据,比如:
                foreach(var p in DataList)
                {
                    Response.Write(string.Format("SqlDataReader返回多条记录:ClassName:{0} ClassCount:{1}<br><br>", p.ClassName, p.ClassCount));
                }
    
    
                //注意SqlDataReader使用完后要关闭和释放资料
                sdr.Close();
                sdr.Dispose();
                SqlConn.Close();
                SqlConn.Dispose();
                #endregion
    
                #region 利用DataTable对象获取数据(记录集)
                /*注意:如果DataTable获取记录,不用打开数据库,即Open()*/
    
                SqlConn.ConnectionString = ConnStr;
    
                //新建SqlCommand对象
                SqlCommand cmd_datatable = new SqlCommand();
    
                //设置SqlCommand对象的Connection属性,即:SqlConn(SqlConnection类型的对象)
                cmd_datatable.Connection = SqlConn;
    
                //如果是执行INSERT/UPDATE/DELETE的SQL语句,可以直接设置CommandText属性
                //如果是执行存储过程,则必须设置CommandType属性为CommandType.StoredProcedure
                cmd_datatable.CommandText = "SELECT * FROM Ex_Class";
    
                //新建一个SqlDataAdapter对象,用来向DataTable填充数据
                SqlDataAdapter sda = new SqlDataAdapter();
    
                //设置SqlDataAdapter对象对应的SqlCommand对象
                sda.SelectCommand = cmd_datatable;
    
                //新建一个DataTable对象,用来接收SqlDataAdapter对象传递过来的数据
                DataTable dt = new DataTable();
    
                //调用SqlDataAdapter对象的Fill方法,将数据填充到DataTable
                sda.Fill(dt);
    
                //接下来可以使用DataTable中的数据,比如获取第一行的值:
                string MyClassName = Convert.ToString(dt.Rows[0]["ClassName"]);
                int MyClassCount = Convert.ToInt32(dt.Rows[0]["ClassCount"]);
    
                Response.Write(string.Format("DataTable返回一条记录:ClassName:{0} ClassCount:{1}<br><br>", MyClassName, MyClassCount));
    
                //也可以使用foreach遍历DataTable中的数据
                List<Model> DList = new List<Model>();
                foreach(DataRow dr in dt.Rows)
                {
                    Model Obj = new Model();
                    Obj.ClassName = Convert.ToString(dr["ClassName"]);
                    Obj.ClassCount = Convert.ToInt32(dr["ClassCount"]);
                    DList.Add(Obj);
    
                    //或者直接输出值
                    Response.Write(string.Format("DataTable返回多条记录:ClassName:{0} ClassCount:{1}<br><br>", dr["ClassName"], dr["ClassCount"]));
                }
    
    
                //如果用DataTable返回一个List类型,除了上面手工转换,还可以使用下面的方法
                //注意:需要引入using Newtonsoft.Json命名空间
    
                //第一步:将DataTable中的数据库序列化为一个字符串
                var json = JsonConvert.SerializeObject(dt);
                List<Model> NewList = new List<Model>();
    
                //第二步:将序列化的字符串反序列化为一个List对象
                NewList = JsonConvert.DeserializeObject<List<Model>>(json);
                #endregion
    
                #region 利用SqlCommand调用存储过程
                if (SqlConn.State == ConnectionState.Closed)
                {
                    SqlConn.ConnectionString = ConnStr;
                    SqlConn.Open();
                }
    
                //新建SqlCommand对象
                SqlCommand cmd_proc = new SqlCommand();
    
                //设置SqlCommand对象的Connection属性,即:SqlConn(SqlConnection类型的对象)
                cmd_proc.Connection = SqlConn;
    
                //如果SqlCommand对象执行的是存储过程,则必需设置SqlCommand对象的CommandType为CommandType.StoredProcedure
                cmd_proc.CommandType = CommandType.StoredProcedure;
    
                //设置SqlCommand对象调用的存储过程名称
                cmd_proc.CommandText = "PROC_Ex_Class";
    
                //设置存储过程需要的参数
                //如果是输入参数需要直接赋值,如果是输出参数或者返回值,则只需要设置参数的Direction属性
                SqlParameter sql_parm1 = new SqlParameter("@ClassName", SqlDbType.NVarChar, 50);
    
                //设置输入参数的值
                sql_parm1.Value = "1909B";
    
                //将参数添加进SqlCommand对象的Parameters集合
                cmd_proc.Parameters.Add(sql_parm1);
    
                //第2个参数
                SqlParameter sql_parm2 = new SqlParameter("@ClassCount", SqlDbType.NVarChar, 50);
    
                //设置输入参数的值
                sql_parm2.Value = 10;
    
                //将参数添加进SqlCommand对象的Parameters集合
                cmd_proc.Parameters.Add(sql_parm2);
    
                //第3个参数:设置输出参数的Direction属性,无需设置值
                SqlParameter sql_parm3 = new SqlParameter("@Info", SqlDbType.NVarChar, 100);
                sql_parm3.Direction = ParameterDirection.Output;
                cmd_proc.Parameters.Add(sql_parm3);
    
                //第4个参数:设置存储过程返回值的Direction属性,无需设置值
                SqlParameter sql_parm4 = new SqlParameter("@ReturnVal", SqlDbType.NVarChar, 100);
                sql_parm4.Direction = ParameterDirection.ReturnValue;
                cmd_proc.Parameters.Add(sql_parm4);
    
                //调用SqlCommand对象的ExecuteNonQuery方法,执行存储过程
                cmd_proc.ExecuteNonQuery();
    
                //存储过程执行完成后,输出参数和返回值参数自动会被赋值
                
                //这是存储过程的输出参数
                string info = Convert.ToString(sql_parm3.Value);
    
                //这是存储过程的返回值
                int returnval = Convert.ToInt32(sql_parm4.Value);
    
                //我们可以把两个结果输出
                Response.Write(string.Format("存储过程执行结果:输出参数:{0},返回值:{1}", info, returnval));
                #endregion
  • 相关阅读:
    【HDOJ】2267 How Many People Can Survive
    【HDOJ】2268 How To Use The Car
    【HDOJ】2266 How Many Equations Can You Find
    【POJ】2278 DNA Sequence
    【ZOJ】3430 Detect the Virus
    【HDOJ】2896 病毒侵袭
    求奇数的乘积
    平方和与立方和
    求数列的和
    水仙花数
  • 原文地址:https://www.cnblogs.com/superfeeling/p/11698334.html
Copyright © 2011-2022 走看看