码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-03-05 18:53:17      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

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      用于存储select、insert、update、delete命令
        SqlDataReader       用作只向前的连接数据读取器
        SqlParameter        用于为存储过程定义一个参数
        SqlTransaction      用于数据库事物
    System.Data.OleDb 命名空间 
        OleDbCommand、OleDbCommandBuilder、OleDbConnection、OleDbDataAdapter、OleDbDataReader、OleDbParameter、OleDbTransaction 。
    System.Data.Odbc 命名空间 
        OdbcCommand、OdbcCommandBuilder、OdbcConnection、OdbcDataAdapter、OdbcDataReader、OdbcParameter、OdbcTransaction 
    System.Data.OracleClient 命名空间 
        OracleCommand、OracleCommandBuilder、OracleConnection、OracleDataAdapter、OracleParameter、OracleTransaction
    注意:ADO.NET附带了3个数据库客户端名称空间,第一个用于SQL Server,第二个用于ODBC数据源,第三个用于通过OLE DB实现的数据库。如果数据库不是SQL Server,就应该使用OLE DB路由,除非还能使用ODBC。

2.使用数据库连接

(1)管理连接字符串
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //连接Oracle数据库========================================================
  6. OracleConnectionStringBuilder constring00 = new OracleConnectionStringBuilder();
  7. constring00.DataSource = "192.168.88.120/branch";
  8. constring00.UserID = "testbranch";
  9. constring00.Password = "testbranch";
  10. Console.WriteLine(constring00.ToString());//输出连接字符串
  11. OracleConnection con00 = new OracleConnection(constring00.ToString());
  12. con00.Open();//打开数据库
  13. con00.Dispose();//关闭数据库
  14. //连接MySQL,使用“MySql.Data.dll”=========================================
  15. MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();
  16. constring01.Server = "localhost";
  17. constring01.UserID = "root";
  18. constring01.Password = "lizhiwei";
  19. constring01.Database = "test";
  20. constring01.Pooling = false;
  21. constring01.Port = 3306;
  22. Console.WriteLine(constring01.ToString());//输出连接字符串
  23. MySqlConnection con01 = new MySqlConnection(constring01.ToString());
  24. //con01.Open();//打开数据库
  25. //con01.Dispose();//关闭数据库
  26. //连接Access数据库(Access 2010级以上)====================================
  27. OleDbConnectionStringBuilder constring02 = new OleDbConnectionStringBuilder();
  28. /*Microsoft.Jet.OleDb.4.0(Access 2007级以下)
  29. * Microsoft.ACE.OLEDB.12.0(Access 2010级以上)*/
  30. constring02.Provider = "Microsoft.ACE.OLEDB.12.0";
  31. /*Access.mdb(Access 2007级以下)
  32. *Access.accdb(Access 2010级以上)*/
  33. constring02.DataSource = @"d:\users\lizw\桌面\Access.accdb";
  34. Console.WriteLine(constring02.ToString());//输出连接字符串
  35. OleDbConnection con02 = new OleDbConnection(constring02.ToString());
  36. con02.Open();//打开数据库
  37. con02.Dispose();//关闭数据库
  38. //连接SQLite数据库========================================================
  39. SQLiteConnectionStringBuilder constring03 = new SQLiteConnectionStringBuilder();
  40. constring03.DataSource = @"d:\users\lizw\桌面\SQLite.db";
  41. Console.WriteLine(constring03.ToString());//输出连接字符串
  42. SQLiteConnection con03 = new SQLiteConnection(constring03.ToString());
  43. con03.Open();//打开数据库
  44. con03.Dispose();//关闭数据库
  45. Console.WriteLine("OK!");
  46. Console.Read();
  47. }
  48. }
    注意:对于部分数据库(如:SQLite)的DLL文件有64位于32位版本的,在编译项目时要根据引用的DLL版本选择对应的目标平台,否者会出现无法加载DLL的错误!
(2)高效的使用连接
    在使用数据库的连接资源时,要确保每个资源在使用完后立即关闭。因为数据库的连接资源是很“稀缺”的资源,下面的例子提供了两种释放数据库的连接的例子。
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //连接MySQL,使用“MySql.Data.dll”
  6. MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();
  7. constring01.Server = "localhost";
  8. constring01.UserID = "root";
  9. constring01.Password = "lizhiwei";
  10. constring01.Database = "test";
  11. constring01.Pooling = false;
  12. constring01.Port = 3306;
  13. MySqlConnection con01 = new MySqlConnection(constring01.ToString());
  14. //第一种方式
  15. try
  16. {
  17. con01.Open();//打开数据库
  18. //操作数据库
  19. }
  20. catch (Exception e)
  21. {
  22. //异常处理
  23. }
  24. finally
  25. {
  26. con01.Dispose();//关闭数据库
  27. }
  28. //第二种方式
  29. using (con01)
  30. {
  31. con01.Open();//打开数据库
  32. //操作数据库
  33. }
  34. Console.WriteLine("OK!");
  35. Console.Read();
  36. }
  37. }
    注意:当操作数据库发生异常时,第二种方式(使用using语句)可能会失效,不会释放数据库的链接。
(3)事物
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //连接MySQL,使用“MySql.Data.dll”
  6. MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();
  7. constring01.Server = "localhost";
  8. constring01.UserID = "root";
  9. constring01.Password = "lizhiwei";
  10. constring01.Database = "test";
  11. constring01.Pooling = false;
  12. constring01.Port = 3306;
  13. MySqlConnection con01 = new MySqlConnection(constring01.ToString());
  14. con01.Open();//打开数据库
  15. MySqlTransaction tra = con01.BeginTransaction();//开启事物
  16. try
  17. {
  18. //操作数据库
  19. tra.Commit();//提交操作
  20. }
  21. catch (Exception e)
  22. {
  23. tra.Rollback();//回滚数据
  24. }
  25. finally
  26. {
  27. con01.Dispose();//关闭数据库
  28. }
  29. Console.WriteLine("OK!");
  30. Console.Read();
  31. }
  32. }

3.命令

(1)执行命令
    ExecuteNonQuery()方法:用于UPDATTE、INSERT、DELETE语句,它的返回值是受影响的记录的个数。但是调用带输出参数的存储过程,该方法就有返回值。
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //连接MySQL,使用“MySql.Data.dll”
  6. MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();
  7. constring01.Server = "localhost";
  8. constring01.UserID = "root";
  9. constring01.Password = "lizhiwei";
  10. constring01.Database = "test";
  11. constring01.Pooling = false;
  12. constring01.Port = 3306;
  13. MySqlConnection con01 = new MySqlConnection(constring01.ToString());
  14. con01.Open();//打开数据库
  15. MySqlTransaction tra = con01.BeginTransaction();//开始事物
  16. string select = "delete from test1";
  17. try
  18. {
  19. MySqlCommand cmd = new MySqlCommand(select, con01);
  20. int count = cmd.ExecuteNonQuery();//执行命令返回受影响的数据记录数
  21. tra.Commit();//提交
  22. Console.WriteLine("删除记录数:" + count);
  23. }
  24. catch (Exception e)
  25. {
  26. tra.Rollback();//回滚
  27. Console.WriteLine(e.Message);
  28. }
  29. finally
  30. {
  31. con01.Dispose();//关闭数据库
  32. }
  33. Console.WriteLine("OK!");
  34. Console.Read();
  35. }
  36. }
    ExecuteReader()方法:返回结果集,一般用于查询。
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //连接MySQL,使用“MySql.Data.dll”
  6. MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();
  7. constring01.Server = "localhost";
  8. constring01.UserID = "root";
  9. constring01.Password = "lizhiwei";
  10. constring01.Database = "test";
  11. constring01.Pooling = false;
  12. constring01.Port = 3306;
  13. MySqlConnection con01 = new MySqlConnection(constring01.ToString());
  14. con01.Open();//打开数据库
  15. string select = "select name,age from test1";
  16. try
  17. {
  18. MySqlCommand cmd = new MySqlCommand(select,con01);
  19. MySqlDataReader reader = cmd.ExecuteReader();//执行命令返回结果集
  20. while (reader.Read())
  21. {
  22. Console.WriteLine(reader[0]+"------"+reader[1]);
  23. }
  24. }
  25. catch (Exception e)
  26. {
  27. Console.WriteLine(e.Message);
  28. }
  29. finally
  30. {
  31. con01.Dispose();//关闭数据库
  32. }
  33. Console.WriteLine("OK!");
  34. Console.Read();
  35. }
  36. }
    ExecuteScalar()方法:返回第一行第一列的值,当要得到表中的记录个数或服务器上的当前时间时就可以使用到此方法。
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //连接MySQL,使用“MySql.Data.dll”
  6. MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();
  7. constring01.Server = "localhost";
  8. constring01.UserID = "root";
  9. constring01.Password = "lizhiwei";
  10. constring01.Database = "test";
  11. constring01.Pooling = false;
  12. constring01.Port = 3306;
  13. MySqlConnection con01 = new MySqlConnection(constring01.ToString());
  14. con01.Open();//打开数据库
  15. string select = "select count(*) from test1";
  16. try
  17. {
  18. MySqlCommand cmd = new MySqlCommand(select, con01);
  19. object count = cmd.ExecuteScalar();//执行命令返回受影响的数据记录数
  20. Console.WriteLine("记录数:" + count);
  21. }
  22. catch (Exception e)
  23. {
  24. Console.WriteLine(e.Message);
  25. }
  26. finally
  27. {
  28. con01.Dispose();//关闭数据库
  29. }
  30. Console.WriteLine("OK!");
  31. Console.Read();
  32. }
  33. }
(2)向SQL语句中传参数
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //连接MySQL,使用“MySql.Data.dll”
  6. MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();
  7. constring01.Server = "localhost";
  8. constring01.UserID = "root";
  9. constring01.Password = "lizhiwei";
  10. constring01.Database = "test";
  11. constring01.Pooling = false;
  12. constring01.Port = 3306;
  13. MySqlConnection con01 = new MySqlConnection(constring01.ToString());
  14. con01.Open();//打开数据库
  15. MySqlTransaction tra = con01.BeginTransaction();//开始事物
  16. string select = "INSERT INTO test1 (id,name,age) VALUES (@id,@name,@age);";
  17. try
  18. {
  19. MySqlCommand cmd = new MySqlCommand(select, con01);
  20. //设置参数类型
  21. MySqlParameter id = new MySqlParameter("@id", MySqlDbType.Int32);
  22. MySqlParameter name = new MySqlParameter("@name", MySqlDbType.VarChar,20);
  23. MySqlParameter age = new MySqlParameter("@age", MySqlDbType.Int32);
  24. //添加参数
  25. cmd.Parameters.Add(id);
  26. cmd.Parameters.Add(name);
  27. cmd.Parameters.Add(age);
  28. //为参数赋值
  29. for (int i = 0; i < 100; i++)
  30. {
  31. id.Value = i;
  32. name.Value = "李志伟" + i;
  33. age.Value = i + 20;
  34. cmd.ExecuteNonQuery();//插入数据
  35. Console.WriteLine(i);
  36. }
  37. tra.Commit();//提交
  38. }
  39. catch (Exception e)
  40. {
  41. tra.Rollback();//回退
  42. Console.WriteLine(e.Message);
  43. }
  44. finally
  45. {
  46. con01.Dispose();//关闭数据库
  47. }
  48. Console.WriteLine("OK!");
  49. Console.Read();
  50. }
  51. }

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

(1)数据集(DataSet)
    DataSet类是数据的脱机容器。它不包含数据库连接的概念,实际上存储在DataSet类中的数据不一定来源于数据库,它可以是来自CSV文件、XML文件的记录。除了在DataSet中定义数据外,也可以定义表之间的连接。DataSet类基本上市内存中的数据库,包含了所有表、关系和约束。
(2)数据表(DataTable)
    一个DataSet中可以有多个DataTable,DataTable的结构如下图,DataTable对象可以附带任意多个扩展属性,扩展属性并不会保存在数据库中。
技术分享
    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    原始值,如果调用DataRow的AcceptChanges()方法,该值就会更新到当前值
        Current     列表的当前值,如果没有编辑,该值与初值相同,否者是最后编辑的值
        Proposed    建议值,调用BeginEdit方法就会有推荐值,直到调用EndEdit或CancelEdit方法为止。
        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的另一个表把一组相关行返回。
    程序示例:
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //连?接óMySQL,使?用?“°MySql.Data.dll”±
  6. MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();
  7. constring01.Server = "localhost";
  8. constring01.UserID = "root";
  9. constring01.Password = "lizhiwei";
  10. constring01.Database = "test";
  11. constring01.Pooling = false;
  12. constring01.Port = 3306;
  13. MySqlConnection con01 = new MySqlConnection(constring01.ToString());
  14. con01.Open();//打洙?开a数簓据Y库a
  15. using (con01)
  16. {
  17. string select = "select id,name,age from test1";
  18. MySqlDataAdapter da = new MySqlDataAdapter(select, con01);
  19. DataSet ds = new DataSet();
  20. da.Fill(ds, "test1");
  21. for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
  22. {
  23. Console.WriteLine(ds.Tables[0].Rows[i]["name"] + " \t" + ds.Tables[0].Rows[i]["age"]);
  24. }
  25. }
  26. Console.WriteLine("OK!");
  27. Console.Read();
  28. }
  29. }
(5)架构的生成
    让运行库来完成
  1. MySqlDataAdapter da = new MySqlDataAdapter(select, con01);
  2. DataSet ds = new DataSet();
  3. da.Fill(ds, "test1");
    编写代码来创建
  1. //手动写代码生成架构
  2. DataTable table = new DataTable("test1");
  3. table.Columns.Add(new DataColumn("id", typeof(int)));
  4. table.Columns.Add(new DataColumn("name", typeof(string)));
  5. table.Columns.Add(new DataColumn("age", typeof(int)));
    使用XML建构生成器:请查看本文档的“XML架构:用XSD”
(6)数据关系(表的主/从关系)
  1. DataSet ds = new DataSet();
  2. //主表(老师信息表)
  3. DataTable teacher = new DataTable("Teacher");
  4. teacher.Columns.Add(new DataColumn("id", typeof(int)));
  5. teacher.Columns.Add(new DataColumn("name", typeof(string)));
  6. teacher.Columns.Add(new DataColumn("age", typeof(int)));
  7. ds.Tables.Add(teacher);
  8. //从表(学生信息表)
  9. DataTable student = new DataTable("Student");
  10. student.Columns.Add(new DataColumn("id", typeof(int)));
  11. student.Columns.Add(new DataColumn("name", typeof(string)));
  12. student.Columns.Add(new DataColumn("age", typeof(int)));
  13. student.Columns.Add(new DataColumn("TeacherID", typeof(int)));//外键
  14. ds.Tables.Add(student);
  15. //建立关系
  16. DataRelation dr = new DataRelation("TeacherStudent",//关系名
  17. ds.Tables["Teacher"].Columns["id"],//主表的主键
  18. ds.Tables["Student"].Columns["TeacherID"]);//从表的外键
  19. ds.Relations.Add(dr);//增加关系
  20. //填充数据
  21. teacher.Rows.Add(1, "teacher1", 20);
  22. student.Rows.Add(1, "student1", 18, 1);
  23. student.Rows.Add(2, "student2", 17, 1);
  24. student.Rows.Add(3, "student3", 16, 1);
  25. //根据主表信息得到所有相应的从表信息
  26. DataRow[] rows = ds.Tables["Teacher"].Rows[0].GetChildRows(dr);
  27. foreach (DataRow temp in rows)
  28. {
  29. Console.WriteLine(temp["id"] + "\t" + temp["name"] + "\t" + temp["age"] + "\t" + temp["TeacherID"]);
  30. }
(7)数据约束
  1. DataSet ds = new DataSet();
  2. //主表(老师信息表)
  3. DataTable teacher = new DataTable("Teacher");
  4. teacher.Columns.Add(new DataColumn("id", typeof(int)));
  5. teacher.Columns.Add(new DataColumn("name", typeof(string)));
  6. teacher.Columns.Add(new DataColumn("age", typeof(int)));
  7. ds.Tables.Add(teacher);
  8. //从表(学生信息表)
  9. DataTable student = new DataTable("Student");
  10. student.Columns.Add(new DataColumn("id", typeof(int)));
  11. student.Columns.Add(new DataColumn("name", typeof(string)));
  12. student.Columns.Add(new DataColumn("age", typeof(int)));
  13. student.Columns.Add(new DataColumn("TeacherID", typeof(int)));//外猘键ü
  14. ds.Tables.Add(student);
  15. //主键约束
  16. DataColumn[] pk = new DataColumn[1];
  17. pk[0] = teacher.Columns["id"];
  18. teacher.PrimaryKey = pk;
  19. //外键约束
  20. ForeignKeyConstraint fk = new ForeignKeyConstraint("FK_Teacher-Student",
  21. teacher.Columns["id"],
  22. student.Columns["TeacherID"]);
  23. fk.UpdateRule = Rule.Cascade;//设置更新约束
  24. fk.DeleteRule = Rule.SetNull;//设置删除约束
  25. ds.Tables["Student"].Constraints.Add(fk);
    Rule枚举的值:
        None        不对相关的行采取任何操作。
        Cascade     删除或更新相关的行。这是默认选项。
        SetNull     将相关的行中的值设置为 DBNull。
        SetDefault  将相关的行中的值设置为 DefaultValue 属性中包含的值。

5.XML架构:用XSD

(1)XSD
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xs:schema id="Teacher"
  3. targetNamespace="http://tempuri.org/XMLSchema1.xsd"
  4. elementFormDefault="qualified"
  5. xmlns="http://tempuri.org/XMLSchema1.xsd"
  6. xmlns:mstns="http://tempuri.org/XMLSchema1.xsd"
  7. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  8. xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  9. <xs:element name="Teacher">
  10. <xs:complexType>
  11. <xs:sequence>
  12. <xs:element name="id" msdata:ReadOnly="true" msdata:AutoIncrement="true" type="xs:int"/>
  13. <xs:element name="name" type="xs:string"/>
  14. <xs:element name="age" type="xs:int" minOccurs="0"/>
  15. </xs:sequence>
  16. </xs:complexType>
  17. </xs:element>
  18. </xs:schema>
(2)生成代码
    在“开始-所有程序-Visual Studio 2010-Visual Studio Tool-命令提示符”中找到命令提示符执行命令“xsd XMLSchema.xsd /d”得到相应的代码文件XMLSchema.cs
(3)用DataSet加载XML架构
  1. DataSet ds = new DataSet();
  2. ds.ReadXmlSchema(@".\XMLSchema.xsd");

6.填充DataSet类

(1)用数据适配器填充DataSet
  1. MySqlDataAdapter da = new MySqlDataAdapter(select, con01);
  2. DataSet ds = new DataSet();
  3. da.Fill(ds, "test1");
(2)从XML中填充DataSet
  1. DataSet ds = new DataSet();
  2. ds.ReadXml(@".\MyData.xml");

7.持久化DataSet类的修改

(1)通过数据适配器进行更新
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //连接MySQL,使用“MySql.Data.dll”
  6. MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();
  7. constring01.Server = "localhost";
  8. constring01.UserID = "root";
  9. constring01.Password = "lizhiwei";
  10. constring01.Database = "test";
  11. constring01.Pooling = false;
  12. constring01.Port = 3306;
  13. MySqlConnection con01 = new MySqlConnection(constring01.ToString());
  14. con01.Open();//打开数据库
  15. using (con01)
  16. {
  17. string sql = "select id,name,age from test1";
  18. DataSet ds = new DataSet();
  19. MySqlDataAdapter da = new MySqlDataAdapter(sql, con01);
  20. MySqlCommandBuilder cb = new MySqlCommandBuilder(da);
  21. da.Fill(ds, "test1");//填充数据集
  22. foreach (DataRow temp in ds.Tables["test1"].Rows)
  23. {
  24. Console.WriteLine(temp["id"] + "\t" + temp["name"] + "\t" + temp["age"]);
  25. }
  26. Console.WriteLine("------------------------------------------------------");
  27. DataRow row = ds.Tables["test1"].NewRow();//新增行
  28. row["id"] = 2014;
  29. row["name"] = "李志伟";
  30. row["age"] = 21;
  31. ds.Tables["test1"].Rows[0]["name"] = "李志伟2014";//更新现有行
  32. ds.Tables["test1"].Rows[1].Delete();//删除行
  33. da.Update(ds, "test1");//提交更新数据
  34. ds.AcceptChanges();//更新数据集DataSet
  35. foreach (DataRow temp in ds.Tables["test1"].Rows)
  36. {
  37. Console.WriteLine(temp["id"] + "\t" + temp["name"] + "\t" + temp["age"]);
  38. }
  39. }
  40. Console.WriteLine("OK!");
  41. Console.Read();
  42. }
  43. }
(2)写入XML输出结果
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //连接MySQL,使用“MySql.Data.dll”
  6. MySqlConnectionStringBuilder constring01 = new MySqlConnectionStringBuilder();
  7. constring01.Server = "localhost";
  8. constring01.UserID = "root";
  9. constring01.Password = "lizhiwei";
  10. constring01.Database = "test";
  11. constring01.Pooling = false;
  12. constring01.Port = 3306;
  13. MySqlConnection con01 = new MySqlConnection(constring01.ToString());
  14. con01.Open();//打开数据库
  15. using (con01)
  16. {
  17. string sql = "select id,name,age from test1";
  18. DataSet ds = new DataSet();
  19. MySqlDataAdapter da = new MySqlDataAdapter(sql, con01);
  20. MySqlCommandBuilder cb = new MySqlCommandBuilder(da);
  21. da.Fill(ds, "test1");
  22. foreach (DataRow temp in ds.Tables["test1"].Rows)
  23. {
  24. Console.WriteLine(temp["id"] + "\t" + temp["name"] + "\t" + temp["age"]);
  25. }
  26. Console.WriteLine("------------------------------------------------------");
  27. ds.WriteXml(@"D:\users\lizw\桌面\DataSet.xml");//得到XML数据
  28. ds.WriteXmlSchema(@"D:\users\lizw\桌面\DataSetSchema.xml");//得到XML架构
  29. }
  30. Console.WriteLine("OK!");
  31. Console.Read();
  32. }
  33. }

8.使用ADO.NET

(1)分层开发
技术分享
  1. DataSet newds = ds.Copy();//复制当前DataSet的架构和数据
  2. newds = ds.Clone();//只复制当前DataSet的架构
  3. newds = ds.GetChanges();//只返回更改的数据
  4. ds.GetChanges(DataRowState.Added);//只返回某些(这里是新增)更改的数据
  5. ds.Merge(?);//合并数据
-------------------------------------------------------------------------------------------------------------------------------




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

标签:

原文地址:http://www.cnblogs.com/LiZhiW/p/4316331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!