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
  • 相关阅读:
    window 删除文件提示指定的文件名无效或太长
    glib-2.40编译安装
    《Android权威编程指南(The Big Nerd Ranch Guide)(第二版)》12.4挑战练习
    Kotlin中when表达式的使用:超强的switch(KAD 13)
    Kotlin将Realm提升到更高层次
    Kotlin中的“忍者”函数 —— 理解泛型的能力(KAD 12)
    Kotlin中功能操作与集合(KAD 11)
    Kotlin的数据类:节省很多行代码(KAD 10)
    在Android中用Kotlin的Anko运行后台任务(KAD 09)
    Kotlin的扩展函数:扩展Android框架(KAD 08)
  • 原文地址:https://www.cnblogs.com/superfeeling/p/11698334.html
Copyright © 2011-2022 走看看