C#操作数据库 学习笔记

  

一: 使用ExecuteReader()操作数据库

            ExecuteReader会返回一个DataReader对象,是一个只读只进的数据流,相比DateSet对象,其速度比较快,所需要的服务器资源也少

         

        public void PrintData()
        {
             string str = "Data Source=localhost;Initial Catalog=MyC#;User ID=sa;password=123456"; 
            SqlConnection con = new SqlConnection(str);
            con.Open(); //打开连接
            string strsql = "select * from maninfo"; //SQL 查询语句
            SqlCommand cmd = new SqlCommand(strsql, con); //初始化Command对象
            SqlDataReader rd = cmd.ExecuteReader(); // 初始化DataReader //对象
            while (rd.Read())   // 读取数据,如果有数据则返回true,饭则false,并移到下一行
            {
                    listBox1.Items.Add(rd["name"].ToString());
            }
            rd.Close();
            con.Close();
        }

通常用ExecuteReader执行查询操作,事务处理inert delete update不建议使用

二:ExecuteNonQuery()操作数据库

       ExecuteNonQuery()返回的是一个整形值,并不是DataSet,是影响数据库的行数.

       通常情况下为数据库事务处理的首选,当需要执行插入、删除、更新等操作时,首选
       ExecuteNonQuery()。

        注意当执行create table 或drop table成功时也是返回-1    

       public void InsertData()
        {
            string str = "Data Source=localhost;Initial Catalog=MyC#;User ID=sa;password=123456";
            SqlConnection con = new SqlConnection(str);
            con.Open(); //打开连接
            string strsql = "insert into maninfo values('小灰','北京',22)"; //SQL 查询语句
            SqlCommand cmd = new SqlCommand(strsql, con); //初始化Command对象
            MessageBox.Show(cmd.ExecuteNonQuery().ToString());
         }

三:ExecuteScalar()操作数据库

       ExecuteScalar   如果是select则返回的是第一行第一列的值,如果执行的不是查询语句,则返回的是一个未实例化的object,

       必须进行类型转换来显示。ExecuteScalar()经常使用于当需要返回单一值时的情况

       public void ScalarData()
        {
            string str = "Data Source=localhost;Initial Catalog=MyC#;User ID=sa;password=123456";
            SqlConnection con = new SqlConnection(str);
            con.Open(); //打开连接
            string strsql = "select @@identity "; //SQL 查询语句
            SqlCommand cmd = new SqlCommand(strsql, con); //初始化Command对象
            MessageBox.Show(cmd.ExecuteScalar().ToString());
            con.Close();
        }

 

 四:用DataSet更新,删除,插入数据

  步骤:

 1.创建一个Connection 对象。
 2.创建一个DataAdapter 对象。
 3.初始化适配器。
 4.使用数据适配器的Fill 方法执行SELECT 命令,并填充DataSet。
 5.执行SqlCommandBuilder 方法生成UpdataCommand 方法。
 6.创建DataTable 对象并指定相应的DataSet 中的表。
 7.创建DataRow 对象并查找需要修改的相应行。
 8.更改DataRow 对象中的列的值。
 9.使用Update 方法进行数据更新。

 DataSet的更新删除和插入操作基本相同,不同的是第7,8步

插入数据库:

        public void DataSetInsert()
        {
            //打开连接
            string str = "Data Source=localhost;Initial Catalog=MyC#;User ID=sa;password=123456";
            SqlConnection con = new SqlConnection(str);
            con.Open();

            //创建适配器
            string sql = "select * from maninfo";
            SqlDataAdapter ds = new SqlDataAdapter(sql, con);  

            //创建DataSet,并填充
            DataSet da = new DataSet();
            ds.Fill(da,"datatable");

            //自适应适配器属性设置
            SqlCommandBuilder du = new SqlCommandBuilder(ds);

            //插入新行
            DataRow dr = da.Tables["datatable"].NewRow();
            dr["name"] = "阿虎";
            dr["address"] = "香港";
            dr["age"] = 33;
            da.Tables["datatable"].Rows.Add(dr);

            //更新
            ds.Update(da, "datatable");

           //关闭
            con.Close();
      }

   更新数据库:

       public void DataSetUpdate()
        {
            //打开连接
            string str = "Data Source=localhost;Initial Catalog=MyC#;User ID=sa;password=123456";
            SqlConnection con = new SqlConnection(str);
            con.Open();

            //创建适配器
            string sql = "select * from maninfo";
            SqlDataAdapter ds = new SqlDataAdapter(sql, con);

            //创建DataSet,并填充
            DataSet da = new DataSet();
            ds.Fill(da, "datatable");

            //为表设置主键
            DataTable db = da.Tables["datatable"];
            db.PrimaryKey = new DataColumn[] { db.Columns["name"] };

            //如果是主键为多列的话:

           //为表设置主键
            //DataTable db = da.Tables["datatable"];
            //db.PrimaryKey = new DataColumn[] { db.Columns["name"], db.Columns["address"] };

            //查找行
            //string[] kk =  { "芙蓉姐姐", "火星" };
            //DataRow dr = db.Rows.Find(kk);
            //dr["age"] = 23;

 

            //自适应适配器属性设置
            SqlCommandBuilder du = new SqlCommandBuilder(ds);

            //查找行
            DataRow dr = db.Rows.Find("芙蓉姐姐");
            dr["address"] = "火星";

            //更新
            ds.Update(da, "datatable");

           //关闭
           con.Close();
      }

删除数据行

     public void DataSetDelete()
        {
            //打开连接
            string str = "Data Source=localhost;Initial Catalog=MyC#;User ID=sa;password=123456";
            SqlConnection con = new SqlConnection(str);
            con.Open();

            //创建适配器
            string sql = "select * from maninfo";
            SqlDataAdapter ds = new SqlDataAdapter(sql, con);

            //创建DataSet,并填充
            DataSet da = new DataSet();
            ds.Fill(da, "datatable");

            //为表设置主键
            DataTable db = da.Tables["datatable"];
            db.PrimaryKey = new DataColumn[] { db.Columns["name"] };

            //自适应适配器属性设置
            SqlCommandBuilder du = new SqlCommandBuilder(ds);

            //查找行
            DataRow dr = db.Rows.Find("小狗");
            dr.Delete();

            //更新
            ds.Update(da, "datatable");

            //关闭
            con.Close();
        }

注意DataSet更新和删除,都必须设置DataSet   DataTablet的主键与实际数据库中的表一样,否则find()会出错

什么时候用DataReader,什么用DataSet (转http://hi.baidu.com/281305450/blog/item/f6c9547ac1a261e32e73b392.html)

如果不需要客户返回值,只需要显示而不修改,用sqldatareader效率比较高。相反用dataset。
sqldatareader提供一种从数据库读取只进的行流的方式.

如果用到分页或者需要有暂存数据的地方,用dataset。

总的来说
大数据量或简单操作 使用 DataReader
中小数据量或复杂操作 使用 DataSet

如果一次性读取的数据量较大建议使用DataSet,DataSet读取之后占的是内存空间,但是现在一般的电脑都有1G以上的内存,所以这点内存算不了什么。完全可以忽略。如果使用DataReader可能会导致网站读取数据的时候 出现假死现象。(千条以上)

如果是少量数据 建议使用DataReader,读取速度较快。让用户体验的舒服些。

在 IIS 服务器上所使用的内存也较少。我们的建议是,如果您的数据来源控件只是用来填入控件的清单成为其选项,亦或是您的数据绑定控件并不需要提供排序或分页功能的话,则应该使用 DataReader。反之,如果您的数据绑定控件需要提供排序或分页功能的话,则必须使用 DataSet 并承担其各项负面效应。 
 DataReader
   速度较快
   不支持快取、分页与动态排序。
  
DataSet
   支持快取、分页与动态排序
   速度较慢

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值