zoukankan      html  css  js  c++  java
  • ADO.NET之使用DataSet类更新数据库

    1.首先从数据库获得数据填充到DataSet类,该类中的表和数据库中的表相互映射。

    2.对DataSet类中的表进行修改(插入,更新,删除等)

    3.同步到数据库中:使用SqlDataAdapter实例名.Update(DataSet实例名,DataSet中和数据库中表相映射的表名),它必须和SqlCommandBuilder必须组合使用

    SqlCommandBuilder:自动生成单表命令,用于将对 DataSet 所做的更改与关联的 SQL Server 数据库的更改相协调,意思是对数据库执行生成相应的sql语句,用于更新数据库

    Update()方法:执行刚才自动生成的命令

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                string source = "server=(local) \SQLEXPRESS;integrated security=true;database=student";
                SqlConnection con = new SqlConnection(source);
                con.Open();
                if (con.State == ConnectionState.Open)
                    Console.WriteLine("数据库已连接!");
                SqlDataAdapter sda = new SqlDataAdapter();//定义数据适配器
                DataSet ds = new DataSet();
                //通过数据适配器对数据库进行查询
                string select = "select * from class";
                SqlCommand com1 = new SqlCommand(select, con);//定义一个查询命令
                sda.SelectCommand = com1;//使用sda.SelectCommand执行这个查询命令(在数据源中选择记录)
                sda.Fill(ds, "result");//将查询结果填充到DataSet类中,并命名为selectresult
                //显示查询结果
                foreach (DataRow x in ds.Tables["result"].Rows)
                    Console.WriteLine("name:{0} id:{1}", x[0], x[1]);
                //添加新的行到DataSet中的DataTable中(第一种方式):
                //使用NewRow()方法,返回一个空白行,然后填充数据,最后把它添加到Rows集合中
                DataRow r = ds.Tables["result"].NewRow();
                r["name"] = "数据结构";
                r["id"] = 3;
                ds.Tables["result"].Rows.Add(r);//添加新的行到DataSet中的DataTable中(第二种方式):
                //把一组已经初始化的数组传递到Row.Add()方法
                ds.Tables["result"].Rows.Add(new object[] { "java",4});
                //删除特定的一行
                for(int i=0;i<ds.Tables["result"].Rows.Count;i++)
                {
                    if (ds.Tables["result"].Rows[i]["name"].ToString().Trim() == "c语言")//trim():需要移除行中存储数据的前导空白字符串和尾部空白字符串
                    {
                        //Remove()和delete()的区别:Remove移除一行后,该行后面的行全部自动向前移,而Delete不向前移,但是使用delete无法更新到数据库,因为无法生成sql的删除代码
                        //ds.Tables["result"].Rows.Remove(ds.Tables["result"].Rows[i]);
                        //i--;
                        ds.Tables["result"].Rows[i].Delete();//移除一行的另一种方式
                    }
                }
                SqlCommandBuilder scb = new SqlCommandBuilder(sda);//自动生成单表命令,用于将对 DataSet 所做的更改与关联的 SQL Server 数据库的更改相协调,意思是对数据库执行生成相应的sql语句,用于更新数据库
                sda.Update(ds, "result");//和SqlCommandBuilder必须组合使用,执行刚才自动生成的命令,“result”为DataSet和数据库中互相映射的表,意思是把result表中所做的更改同步到数据库源表中
                foreach (DataRow x in ds.Tables["result"].Rows)
                    Console.WriteLine("name:{0} id:{1}", x[0], x[1]);
            }
        }
    }
  • 相关阅读:
    find文件及目录后的一些操作
    Firefox关闭GET请求到detectportal.firefox.com网站的方法
    Shell脚本自定义批量生成ip
    Nginx关闭危险的HTTP请求
    个人总结
    软件工程第二次作业--结对编程
    软件工程第一次作业
    C#中使用存储过程返回值的问题(转)
    使用SqlDataAdapter时,需要注意的几点(转)
    Sql连接查询(转)
  • 原文地址:https://www.cnblogs.com/runninglzw/p/3860245.html
Copyright © 2011-2022 走看看