C#连接数据库(ADO.NET)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#连接数据库(ADO.NET)

C#连接数据库(ADO.NET)

 2014/3/24 9:49:29  程序人生2014  博客园  我要评论(0)
  • 摘要:C#连接数据库(ADO.NET)1.ADO.NET介绍............................................................2(1)共享类.................................................................2(2)数据库专用类.....................................................22.使用数据库连接.................
  • 标签:.net C# net 数据库 数据 连接

class="MsoNormal" style="text-align: center;" align="center">C#连接数据库(ADO.NET)

1. ADO.NET介绍............................................................ 2

(1) 共享类................................................................. 2

(2) 数据库专用类..................................................... 2

2. 使用数据库连....................................................... 2

(1) 管理连接字符串................................................. 2

(2) 高效的使用连接................................................. 3

(3) 事物..................................................................... 4

3. 命令........................................................................... 4

(1) 执行命令............................................................. 4

(2) 向SQL语句中传参数......................................... 6

4. 管理数据和关系:DataSet................................ 7

(1) 数据集(DataSet)............................................... 7

(2) 数据表(DataTable)........................................... 7

(3) 数据列(DataColumn)......................................... 7

(4) 数据行(DataRow)............................................... 8

(5) 架构的生成......................................................... 9

(6) 数据关系(表的主/从关系)............................... 9

(7) 数据约束............................................................. 9

5. XML架构:用XSD................................................... 10

(1) XSD..................................................................... 10

(2) 生成代码........................................................... 10

(3) 用DataSet加载XML架构............................... 10

6. 填充DataSet...................................................... 11

(1) 用数据适配器填充DataSet............................ 11

(2) 从XML中填充DataSet.................................... 11

7. 持久化DataSet类的修改...................................... 11

(1) 通过数据适配器进行更新............................... 11

(2) 写入XML输出结果........................................... 11

8. 使用ADO.NET.......................................................... 12

(1) 分层开发........................................................... 12

 

1.ADO.NET介绍

(1)共享类

System.Data 命名空间

DataSet

表示数据在内存中的缓存

DataTable

表示内存中数据的一个表

DataRow

表示 DataTable 中的一行数据

DataColumn

表示 DataTable 中列的架构

DataRelation

表示两个 DataTable 对象之间的父/子关系

Constraint

表示可在一个或多个 DataColumn 对象上强制的约束

System.Data.Common 命名空间

DataColumnMapping

包含从 DataAdapter 继承的对象的一般列映射

DataTableMapping

包含源表和 DataTable 之间的映射关系的说明

(2)数据库专用类

System.Data.SqlClient 命名空间

SqlCommand

用作SQL语句或存储过程调用的包装器

SqlCommandBuilder

用于从一条Select语句中生成SQL命令

SqlConnection

用于连接数据库

SqlDataAdapter

用于存储selectinsertupdatedelete命令

SqlDataReader

用作只向前的连接数据读取器

SqlParameter

用于为存储过程定义一个参数

SqlTransaction

用于数据库事物

System.Data.OleDb 命名空间

OleDbCommandOleDbCommandBuilderOleDbConnectionOleDbDataAdapterOleDbDataReaderOleDbParameterOleDbTransaction

System.Data.Odbc 命名空间

OdbcCommandOdbcCommandBuilderOdbcConnectionOdbcDataAdapterOdbcDataReaderOdbcParameterOdbcTransaction

System.Data.OracleClient 命名空间

OracleCommandOracleCommandBuilderOracleConnectionOracleDataAdapterOracleParameterOracleTransaction

注意:ADO.NET附带了3个数据库客户端名称空间,第一个用于SQL Server,第二个用于ODBC数据源,第三个用于通过OLE DB实现的数据库。如果数据库不是SQL Server,就应该使用OLE DB路由,除非还能使用ODBC

2.使用数据库连接

(1)管理连接字符串

    class Program

    {

        static void Main(string[] args)

        {

            //连接Oracle数据库========================================================

            OracleConnectionStringBuilder constring00 = new OracleConnectionStringBuilder();

            constring00.DataSource = "192.168.88.120/branch";

            constring00.UserID = "testbranch";

            constring00.Password = "testbranch";

            Console.WriteLine(constring00.ToString());//输出连接字符串

            OracleConnection con00 = new OracleConnection(constring00.ToString());

            con00.Open();//打开数据库

            con00.Dispose();//关闭数据库

            //连接MySQL,使用“MySql.Data.dll=========================================

            MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();

            constring01.Server = "localhost";

            constring01.UserID = "root";

            constring01.Password = "lizhiwei";

            constring01.Database = "test";

            constring01.Pooling = false;

            constring01.Port = 3306;

            Console.WriteLine(constring01.ToString());//输出连接字符串

            MySqlConnection con01 = new MySqlConnection(constring01.ToString());

            //con01.Open();//打开数据库

            //con01.Dispose();//关闭数据库

            //连接Access数据库(Access 2010级以上)====================================

            OleDbConnectionStringBuilder constring02 = new OleDbConnectionStringBuilder();

            /*Microsoft.Jet.OleDb.4.0(Access 2007级以下)

             * Microsoft.ACE.OLEDB.12.0(Access 2010级以上)*/

            constring02.Provider = "Microsoft.ACE.OLEDB.12.0";

            /*Access.mdb(Access 2007级以下)

             *Access.accdb(Access 2010级以上)*/

            constring02.DataSource = @"d:\users\lizw\桌面\Access.accdb";

            Console.WriteLine(constring02.ToString());//输出连接字符串

            OleDbConnection con02 = new OleDbConnection(constring02.ToString());

            con02.Open();//打开数据库

            con02.Dispose();//关闭数据库

            //连接SQLite数据库========================================================

            SQLiteConnectionStringBuilder constring03 = new SQLiteConnectionStringBuilder();

            constring03.DataSource = @"d:\users\lizw\桌面\SQLite.db";

            Console.WriteLine(constring03.ToString());//输出连接字符串

            SQLiteConnection con03 = new SQLiteConnection(constring03.ToString());

            con03.Open();//打开数据库

            con03.Dispose();//关闭数据库

            Console.WriteLine("OK!");

            Console.Read();

        }

}

注意:对于部分数据库(如:SQLite)DLL文件有64位于32版本的,在编译项目时要根据引用的DLL版本选择对应的目标平台,否者会出现无法加载DLL错误

(2)高效的使用连接

在使用数据库的连接资源时,要确保每个资源在使用完后立即关闭。因为数据库的连接资源是很“稀缺”的资源,下面的例子提供了两种释放数据库的连接的例子。

    class Program

    {

        static void Main(string[] args)

        {

            //连接MySQL,使用“MySql.Data.dll

            MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();

            constring01.Server = "localhost";

            constring01.UserID = "root";

            constring01.Password = "lizhiwei";

            constring01.Database = "test";

            constring01.Pooling = false;

            constring01.Port = 3306;

            MySqlConnection con01 = new MySqlConnection(constring01.ToString());

            //第一种方式

            try

            {

                con01.Open();//打开数据库

                //操作数据库

            }

            catch (Exception e)

            {

                //异常处理

            }

            finally

            {

                con01.Dispose();//关闭数据库

            }

            //第二种方式

            using (con01)

            {

                con01.Open();//打开数据库

                //操作数据库

            }

            Console.WriteLine("OK!");

            Console.Read();

        }

}

注意:当操作数据库发生异常时,第二种方式(使用using语句)可能会失效,不会释放数据库的链接。

(3)事物

    class Program

    {

        static void Main(string[] args)

        {

            //连接MySQL,使用“MySql.Data.dll

            MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();

            constring01.Server = "localhost";

            constring01.UserID = "root";

            constring01.Password = "lizhiwei";

            constring01.Database = "test";

            constring01.Pooling = false;

            constring01.Port = 3306;

            MySqlConnection con01 = new MySqlConnection(constring01.ToString());

            con01.Open();//打开数据库

            MySqlTransaction tra = con01.BeginTransaction();//开启事物

            try

            {

                //操作数据库

                tra.Commit();//提交操作

            }

            catch (Exception e)

            {

                tra.Rollback();//回滚数据

            }

            finally

            {

                con01.Dispose();//关闭数据库

            }

            Console.WriteLine("OK!");

            Console.Read();

        }

    }

3.命令

(1)执行命令

ExecuteNonQuery()方法:用于UPDATTEINSERTDELETE语句,它的返回值是受影响的记录的个数。但是调用带输出参数的存储过程,该方法就有返回值。

    class Program

    {

        static void Main(string[] args)

        {

            //连接MySQL,使用“MySql.Data.dll

            MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();

            constring01.Server = "localhost";

            constring01.UserID = "root";

            constring01.Password = "lizhiwei";

            constring01.Database = "test";

            constring01.Pooling = false;

            constring01.Port = 3306;

            MySqlConnection con01 = new MySqlConnection(constring01.ToString());

            con01.Open();//打开数据库

            MySqlTransaction tra = con01.BeginTransaction();//开始事物

            string select = "delete from test1";

            try

            {

                MySqlCommand cmd = new MySqlCommand(select, con01);

                int count = cmd.ExecuteNonQuery();//执行命令返回受影响的数据记录数

                tra.Commit();//提交

                Console.WriteLine("删除记录数:" + count);

            }

            catch (Exception e)

            {

                tra.Rollback();//回滚

                Console.WriteLine(e.Message);

            }

            finally

            {

                con01.Dispose();//关闭数据库

            }

            Console.WriteLine("OK!");

            Console.Read();

        }

    }

ExecuteReader()方法:返回结果集,一般用于查询。

    class Program

    {

        static void Main(string[] args)

        {

            //连接MySQL,使用“MySql.Data.dll

            MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();

            constring01.Server = "localhost";

            constring01.UserID = "root";

            constring01.Password = "lizhiwei";

            constring01.Database = "test";

            constring01.Pooling = false;

            constring01.Port = 3306;

            MySqlConnection con01 = new MySqlConnection(constring01.ToString());

            con01.Open();//打开数据库

            string select = "select name,age from test1";

            try

            {

                MySqlCommand cmd = new MySqlCommand(select,con01);

                MySqlDataReader reader = cmd.ExecuteReader();//执行命令返回结果集

                while (reader.Read())

                {

                    Console.WriteLine(reader[0]+"------"+reader[1]);

                }

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

            }

            finally

            {

                con01.Dispose();//关闭数据库

            }

            Console.WriteLine("OK!");

            Console.Read();

        }

    }

cmd.ExecuteScalar()方法:返回第一行第一列的值,当要得到表中的记录个数或服务器上的当前时间时就可以使用到此方法。

    class Program

    {

        static void Main(string[] args)

        {

            //连接MySQL,使用“MySql.Data.dll

            MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();

            constring01.Server = "localhost";

            constring01.UserID = "root";

            constring01.Password = "lizhiwei";

            constring01.Database = "test";

            constring01.Pooling = false;

            constring01.Port = 3306;

            MySqlConnection con01 = new MySqlConnection(constring01.ToString());

            con01.Open();//打开数据库

            string select = "select count(*) from test1";

            try

            {

                MySqlCommand cmd = new MySqlCommand(select, con01);

                object count = cmd.ExecuteScalar();//执行命令返回受影响的数据记录数

                Console.WriteLine("记录数:" + count);

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

            }

            finally

            {

                con01.Dispose();//关闭数据库

            }

            Console.WriteLine("OK!");

            Console.Read();

        }

    }

(2)SQL语句中传参数

    class Program

    {

        static void Main(string[] args)

        {

            //连接MySQL,使用“MySql.Data.dll

            MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();

            constring01.Server = "localhost";

            constring01.UserID = "root";

            constring01.Password = "lizhiwei";

            constring01.Database = "test";

            constring01.Pooling = false;

            constring01.Port = 3306;

            MySqlConnection con01 = new MySqlConnection(constring01.ToString());

            con01.Open();//打开数据库

            MySqlTransaction tra = con01.BeginTransaction();//开始事物

            string select = "INSERT INTO test1 (id,name,age) VALUES (@id,@name,@age);";

            try

            {

                MySqlCommand cmd = new MySqlCommand(select, con01);

                //设置参数类型

                MySqlParameter id = new MySqlParameter("@id", MySqlDbType.Int32);

                MySqlParameter name = new MySqlParameter("@name", MySqlDbType.VarChar,20);

                MySqlParameter age = new MySqlParameter("@age", MySqlDbType.Int32);

                //添加参数

                cmd.Parameters.Add(id);

                cmd.Parameters.Add(name);

                cmd.Parameters.Add(age);

                //为参数赋值

                for (int i = 0; i < 100; i++)

                {

                    id.Value = i;

                    name.Value = "李志伟" + i;

                    age.Value = i + 20;

                    cmd.ExecuteNonQuery();//插入数据

                    Console.WriteLine(i);

                }

                tra.Commit();//提交

            }

            catch (Exception e)

            {

                tra.Rollback();//回退

                Console.WriteLine(e.Message);

            }

            finally

            {

                con01.Dispose();//关闭数据库

            }

            Console.WriteLine("OK!");

            Console.Read();

        }

    }

4.管理数据和关系:DataSet

(1)数据集(DataSet)

DataSet类是数据的脱机容器。它不包含数据库连接的概念,实际上存储在DataSet类中的数据不一定来源于数据库,它可以是来自CSV文件、XML文件的记录。除了在DataSet中定义数据外,也可以定义表之间的连接。DataSet类基本上市内存中的数据库,包含了所有表、关系和约束。

(2)数据表(DataTable)

一个DataSet中可以有多个DataTableDataTable的结构如下图,DataTable对象可以附带任意多个扩展属性,扩展属性并不会保存在数据库中。

图像 1

Rows集合包含了表中的数据行,通过它可以访问到表中的所有数据。Columns集合包含已经添加到表中的DataColumn实例,它们定义了数据的架构,如数据类型、是否可为空等。Constraints集合可以用唯一约束主键约束来填充。

(3)数据列(DataColumn)

DataColumn对象也可以附带任意多个扩展属性。DataColumn对象定义了DataTable中某列的属性,如该列的数据类型,该列是否为只读,以及其它属性。其属性如下:

AllowDBNull

是否允许空值

AutoIncrement

是否将列的值自动递增

AutoIncrementSeed

定义AutoIncrement列的起始值

AutoIncrementStep

定义AutoIncrement列使用的增量

Caption

获取或设置列的标题

ColumnMapping

获取或设置列的MappingType

ColumnName

获取或设置 DataColumnCollection 中的列的名称

DataType

获取或设置存储在列中的数据的类型

DateTimeMode

获取或设置列的 DateTimeMode

DefaultValue

在创建新行时获取或设置列的默认值

ReadOnly

是否还允许更改

Unique

是否必须是唯一的

Expression

获取或设置表达式,用于筛选行、计算列中的值或创建聚合列

(4)数据行(DataRow)

DataTable表中的数据是用DataRow对象来访问。还使用DataRowVersion枚举来访问DataRow的不同版本的值,下表是DataRowVersion枚举的成员:

Original

原始值,如果调用DataRowAcceptChanges()方法,该值就会更新到当前值

Current

列表的当前值,如果没有编辑,该值与初值相同,否者是最后编辑的值

Proposed

建议值,调用BeginEdit方法就会有推荐值,直到调用EndEditCancelEdit方法为止。

Default

默认值,列设置的默认值

 数据行有一个状态标志RowState属性,它是DataRowState枚举类型,成员如下:

Detached

DataRow在以下情况下立即处于此状态:创建之后添加到集合中之前;从集合中移除之后。

Unchanged

表示该行自上次调用 AcceptChanges 以来尚未更改。

Added

该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用。

Deleted

该行已通过 DataRow Delete 方法被删除。

Modified

该行已被修改,AcceptChanges 尚未调用。

      一般在成功更新数据源(即把修改的数据持久化到数据库中)之后调用AcceptChanges方法。修改DataRow中的数据常用的是使用索引器,但如果对数据进行了许多修改,就要考虑使用BeginEdit()EndEdit()方法,因为对DataRow中的数据进行修改会引发ColumnChanging事件,如果在修改前调用BeginEdit()方法就不会引发ColumnChanging事件,修改完成再调用EndEdit()方法持久化修改,如果要回退修改可以调用CancelEdit()方法。DataRow可以以某种方式链接到其它数据行上,在数据之间可建立可导航的链接,使用GetChildRows()方法可以从同一个DataSet的另一个表把一组相关行返回。

程序示例:

    class Program

    {

        static void Main(string[] args)

        {

            //?接óMySQL,使??“°MySql.Data.dll”±

            MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();

            constring01.Server = "localhost";

            constring01.UserID = "root";

            constring01.Password = "lizhiwei";

            constring01.Database = "test";

            constring01.Pooling = false;

            constring01.Port = 3306;

            MySqlConnection con01 = new MySqlConnection(constring01.ToString());

            con01.Open();//打洙?a数簓据Ya

            using (con01)

            {

                string select = "select id,name,age from test1";

                MySqlDataAdapter da = new MySqlDataAdapter(select, con01);

                DataSet ds = new DataSet();

                da.Fill(ds, "test1");

                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

                {

                    Console.WriteLine(ds.Tables[0].Rows[i]["name"] + " \t"

+ ds.Tables[0].Rows[i]["age"]);

                }

            }

            Console.WriteLine("OK!");

            Console.Read();

        }

    }

(5)架构的生成

让运行库来完成

                MySqlDataAdapter da = new MySqlDataAdapter(select, con01);

                DataSet ds = new DataSet();

                da.Fill(ds, "test1");

写代码来创建

            //手动写代码生成架构

            DataTable table = new DataTable("test1");

            table.Columns.Add(new DataColumn("id", typeof(int)));

            table.Columns.Add(new DataColumn("name", typeof(string)));

            table.Columns.Add(new DataColumn("age", typeof(int)));

使用XML建构生成器

请查看本文档的:XML架构:用XSD

(6)数据关系(表的主/从关系)

            DataSet ds = new DataSet();

            //主表(老师信息表)

            DataTable teacher = new DataTable("Teacher");

            teacher.Columns.Add(new DataColumn("id", typeof(int)));

            teacher.Columns.Add(new DataColumn("name", typeof(string)));

            teacher.Columns.Add(new DataColumn("age", typeof(int)));

            ds.Tables.Add(teacher);

            //从表(学生信息表)

            DataTable student = new DataTable("Student");

            student.Columns.Add(new DataColumn("id", typeof(int)));

            student.Columns.Add(new DataColumn("name", typeof(string)));

            student.Columns.Add(new DataColumn("age", typeof(int)));

            student.Columns.Add(new DataColumn("TeacherID", typeof(int)));//外猘键ü

            ds.Tables.Add(student);

            //建立关系

            DataRelation dr = new DataRelation("TeacherStudent",//关系名

                ds.Tables["Teacher"].Columns["id"],//主表的主键

                ds.Tables["Student"].Columns["TeacherID"]);//从表的外键

            ds.Relations.Add(dr);//增加关系

            //填充数据

            teacher.Rows.Add(1, "teacher1", 20);

            student.Rows.Add(1, "student1", 18, 1);

            student.Rows.Add(2, "student2", 17, 1);

            student.Rows.Add(3, "student3", 16, 1);

            //根据主表信息得到所有相应的从表信息

            DataRow[] rows = ds.Tables["Teacher"].Rows[0].GetChildRows(dr);

            foreach (DataRow temp in rows)

            {

                Console.WriteLine(temp["id"] + "\t" + temp["name"]

+ "\t" + temp["age"] + "\t" + temp["TeacherID"]);

            }

(7)数据约束

            DataSet ds = new DataSet();

            //主表(老师信息表)

            DataTable teacher = new DataTable("Teacher");

            teacher.Columns.Add(new DataColumn("id", typeof(int)));

            teacher.Columns.Add(new DataColumn("name", typeof(string)));

            teacher.Columns.Add(new DataColumn("age", typeof(int)));

            ds.Tables.Add(teacher);

            //从表(学生信息表)

            DataTable student = new DataTable("Student");

            student.Columns.Add(new DataColumn("id", typeof(int)));

            student.Columns.Add(new DataColumn("name", typeof(string)));

            student.Columns.Add(new DataColumn("age", typeof(int)));

            student.Columns.Add(new DataColumn("TeacherID", typeof(int)));//外猘键ü

            ds.Tables.Add(student);

            //主键约束

            DataColumn[] pk = new DataColumn[1];

            pk[0] = teacher.Columns["id"];

            teacher.PrimaryKey = pk;

            //外键约束

            ForeignKeyConstraint fk = new ForeignKeyConstraint("FK_Teacher-Student",

                teacher.Columns["id"],

                student.Columns["TeacherID"]);

            fk.UpdateRule = Rule.Cascade;//设置更新约束

            fk.DeleteRule = Rule.SetNull;//设置删除约束

            ds.Tables["Student"].Constraints.Add(fk);

Rule枚举的值:

成员名称

说明

None

不对相关的行采取任何操作。

Cascade

删除或更新相关的行。这是默认选项。

SetNull

将相关的行中的值设置为 DBNull

SetDefault

将相关的行中的值设置为 DefaultValue属性中包含的值。

5.XML架构:用XSD

(1)XSD

<?xmlversion="1.0"encoding="utf-8"?>

<xs:schemaid="Teacher"

    targetNamespace="http://tempuri.org/XMLSchema1.xsd"

    elementFormDefault="qualified"

    xmlns="http://tempuri.org/XMLSchema1.xsd"

    xmlns:mstns="http://tempuri.org/XMLSchema1.xsd"

    xmlns:xs="http://www.w3.org/2001/XMLSchema"

   xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"

> 

  <xs:elementname="Teacher">

    <xs:complexType>

      <xs:sequence>

        <xs:elementname="id"msdata:ReadOnly="true"

msdata:AutoIncrement="true"type="xs:int"/>

        <xs:elementname="name"type="xs:string"/>

        <xs:elementname="age"type="xs:int"minOccurs="0"/>

      </xs:sequence>

    </xs:complexType>

  </xs:element>

</xs:schema>

(2)生成代码

在“开始-所有程序-Visual Studio 2010-Visual Studio Tool-命令提示符”中找到命令提示符执行命令“xsd XMLSchema.xsd /d”得到相应的代码文件XMLSchema.cs

(3)DataSet加载XML架构

            DataSet ds = new DataSet();

            ds.ReadXmlSchema(@".\XMLSchema.xsd");

6.填充DataSet

(1)用数据适配器填充DataSet

                MySqlDataAdapter da = new MySqlDataAdapter(select, con01);

                DataSet ds = new DataSet();

                da.Fill(ds, "test1");

(2)XML中填充DataSet

            DataSet ds = new DataSet();

            ds.ReadXml(@".\MyData.xml");

7.持久化DataSet类的修改

(1)通过数据适配器进行更新

    class Program

    {

        static void Main(string[] args)

        {

            //连接MySQL,使用“MySql.Data.dll

            MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();

            constring01.Server = "localhost";

            constring01.UserID = "root";

            constring01.Password = "lizhiwei";

            constring01.Database = "test";

            constring01.Pooling = false;

            constring01.Port = 3306;

            MySqlConnection con01 = new MySqlConnection(constring01.ToString());

            con01.Open();//打开数据库

            using (con01)

            {

                string sql = "select id,name,age from test1";

                DataSet ds = new DataSet();

                MySqlDataAdapter da = new MySqlDataAdapter(sql, con01);

                MySqlCommandBuilder cb = new MySqlCommandBuilder(da);

                da.Fill(ds, "test1");//填充数据集

                foreach (DataRow temp in ds.Tables["test1"].Rows)

                {

                    Console.WriteLine(temp["id"] + "\t" + temp["name"] + "\t" + temp["age"]);

                }

                Console.WriteLine("------------------------------------------------------");

                DataRow row = ds.Tables["test1"].NewRow();//新增行

                row["id"] = 2014;

                row["name"] = "李志伟";

                row["age"] = 21;

                ds.Tables["test1"].Rows[0]["name"] = "李志伟2014";//更新现有行

                ds.Tables["test1"].Rows[1].Delete();//删除行

                da.Update(ds, "test1");//提交更新数据

                ds.AcceptChanges();//更新数据集DataSet

                foreach (DataRow temp in ds.Tables["test1"].Rows)

                {

                    Console.WriteLine(temp["id"] + "\t" + temp["name"] + "\t" + temp["age"]);

                }

            }

            Console.WriteLine("OK!");

            Console.Read();

        }

    }

(2)写入XML输出结果

    class Program

    {

        static void Main(string[] args)

        {

            //连接MySQL,使用“MySql.Data.dll

            MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();

            constring01.Server = "localhost";

            constring01.UserID = "root";

            constring01.Password = "lizhiwei";

            constring01.Database = "test";

            constring01.Pooling = false;

            constring01.Port = 3306;

            MySqlConnection con01 = new MySqlConnection(constring01.ToString());

            con01.Open();//打开数据库

            using (con01)

            {

                string sql = "select id,name,age from test1";

                DataSet ds = new DataSet();

                MySqlDataAdapter da = new MySqlDataAdapter(sql, con01);

                MySqlCommandBuilder cb = new MySqlCommandBuilder(da);

                da.Fill(ds, "test1");

                foreach (DataRow temp in ds.Tables["test1"].Rows)

                {

                    Console.WriteLine(temp["id"] + "\t" + temp["name"] + "\t" + temp["age"]);

                }

                Console.WriteLine("------------------------------------------------------");

                ds.WriteXml(@"D:\users\lizw\桌面\DataSet.xml");//得到XML数据

                ds.WriteXmlSchema(@"D:\users\lizw\桌面\DataSetSchema.xml");//得到XML架构

            }

            Console.WriteLine("OK!");

            Console.Read();

        }

}

8.使用ADO.NET

(1)分层开发

image002

    DataSet newds = ds.Copy();//复制当前DataSet的架构和数据

    newds = ds.Clone();//只复制当前DataSet的架构

    newds = ds.GetChanges();//只返回更改的数据

    ds.GetChanges(DataRowState.Added);//只返回某些(这里是新增)更改的数据

    ds.Merge(?);//合并数据

发表评论
用户名: 匿名