分享

C#数据库操作

 旭龙 2011-01-12

   数据库在程序设计中的地位越来越来高,很有必要掌握这种编程方法。虽然要想在短时间内完全掌握数据库编程是很有难度的,但我们可以首先掌握基本的知识,其他的复杂的技术其实是在这些基础知识上多次迭代而产生的。下面我们来分篇介绍基本的数据库的知识。这里介绍的是ADO.net(ADO和它是差不多的)。

 

 

访问数据库的方法有很多,这里介绍的是ADO.NET技术。

      1. 连接和关闭数据库

首先要连接数据库,可以通过ADO.NET connection对象来连接数据库。ADO.NET

好几个connection对象,例如:OleDbConnection 对象(用于访问通过传统ADO访问的OLE DB数据提供者)和SqlConnection对象(提供队SQL Server的优化访问)。如果要访问的数据库是SQL Server就用后一个对象,否则就用前面一个对象。使用连接对象之前必须要包含相应的命名空间。

using System.Data.OleDb;

在建立连接对象实例之前,必须先要填充连接对象的ConnectionString属性,这个属性包含了多个参数:

   Provider  数据库提供者的名称

   Data Source  数据源,即数据库的路径

   User ID   用户名

   Password  密码

   DRIVER  数据库驱动器的名称,如果指定了DSN就不要这个参数了

   SERVER   数据源服务器的网络名称

这个属性初始化的格式是:(假定连接的事Access数据库,数据库文件在C : \temp目录下)

m_cnADONetConnection.ConnectionString =

  @” Provider = Microsoft.Jet.OLEDB.4.0Data Source = C : \temp\contacts.mdb

     User ID = zlw Password = 123456 ”

其他类型的数据库的提供者信息需查阅相关资料。

连接对象的属性设置好后,就可以创建实例对象了:

m_cnADONetConnection = new OleDbConnection();

接下来,可以打开数据库了:

m_cnADONetConnection.Open();

数据库使用完毕后要关闭连接,释放资源:

m_cnADONetConnection.Close();

m_cnADONetConnection.Dispose();

 

2.操作数据库

A.使用sqlcommand OleDbCommand类来执行sql语句。

   连接数据库后就可以创建一个语句命令对象,然后执行这个语句。

   OleDbCommand str = new OleDbCommand(select * from texts , m_cnADONetConnection);

Str.ExecuteScalar();               //执行这个语句

oleDbDataReader daOle = Str.ExecuteReader();               //返回对象

daOle.FieldCount;          //返回查询结构当前行的列数

daOle.GetString(i);      //返回当前行第i列的字符串形式

daOle.Read();        // 前进到下一条记录

Sql语句的执行函数有很多种 , 其中最有用的是ExecuteReader()这个函数,这个函数返回一个OleDbDaraReader类对象,这个对象包含语句的查询结果,其中有很多方法可以对数据进行操作。

 

 

B.对数据库进行操作,最好的方法是创建DataTable对象,这个对象是数据源中数据的一个快照,可以先对DataTable进行操作,然后再将修改的快照返回数据库,以实现数据的更新。

在使用DataTable之前先要填充这个对象,这里利用DataAdapterFill方法。先构造对象:

OleDbDataAdapter m_daDataAdapter = new OleDbDataAdapter

(“Select * From Contacts” ,  

                           m_cnADONetConnection);

参数1指定拷贝到DataTable中的数据,参数2指定连接对象。

为了使DataTable能对数据进行操作,此时还应该建立一个CommandBuilder对象,这个对象建立后,并不用主动调用它,只要将它和DataAdapter关联起来,就可以在幕后对数据进行操作了。

OleDbCommandBuilder m_cbCommandBuilder =  new

                                      OleDbCommandBuilder(m_daDataAdapter);

准备工作完成后就应该创建并填充DataTable了:

      DataTable m_dtContacts = new DataTable();

      m_daDataAdapter.Fill(m_dtContacts);

 

    DataTable可以看成是一个集合,我们可以通过它来直接操作数据库中的表。如:

   访问指定行中的指定列的数据,可以通过语句:

     m_dtContacts[“行号”][“列名”] = “” ; //j将指定位置的数据修改

   字符串变量 = m_dtContacts[“行号”][“列名”]  //取得指定位置的数据

    //在表中增加一行

     DataRow drNewRow = m_dtContacts.NewRow();

     drNewRow[“第一列名”] = str ;

     drNewRow[“第二列名”] = str;

        ……

     m_dtContacts.Rows.Add(drNewRow) ;

    //删除一行

     m_dtContacts.Rows[“行号”].Delete();

 

在对内存数据库DataSet进行修改处理后必须调用下面语句,才能反映到物理数据库中:

      m_daDataAdapter.Update(m_dtContacts) ;

 

   上面介绍的修改是通过修改DataSet,然后同步物理数据库的修改。还有一种方法是通过修改物理数据库,然后同步DataSet。这种方法是通过SQL语句来修改物理数据库,然后更新DataSet来同步。具体代码为:

string strDele = "DELETE FROM Contacts where 条件 ;

OleDbCommand myCommand = new OleDbCommand ( strDele , myConn ) ;

file://从数据库中删除指定记录

myCommand.ExecuteNonQuery ( ) ;  // 执行SQL语句

file://DataSet中删除指定记录 ,同步操作

myDataSet.Tables [ " Contacts " ] . Rows [ 行号 ] . Delete ( ) ;

myDataSet.Tables [ " Contacts " ] . AcceptChanges ( ) ;

 

 

 

3.绑定数据库

    在c#中任何一个从Control类派生来的类均可以绑定数据源。绑定数据源必须要用到DataSet,这个类和DataTable类的区别就像数据库中表和数据库的区别,一个DataSet可以包含多个DataTable,在我们用DataAdapter填充DataTable时,也可以填充DataSet,其语法为:

DataSet ds = new DataSet();

m-daDataAdapterFillds   “Contacts”); // Contactsds关联的表名

在有了ds后就可以进行数据的绑定了

textBox1.DataBindings.Add ( "Text" , ds , "Contacts。列名" ) ; 

这句代码将表Contacts中的某列的当前行绑定在textBox1上。“Text”是数据类型。

使用这种方法也可以将表中某列绑定到其他的简单控件上。

当要将数据绑定到复杂控件上,必须使用以下代码:

ComboBox1.DataSource = ds ;
ComboBox1.DisplayMember = " Contacts
。列名
" ;
ComboBox1.ValueMember = " Contacts
。列名" ;

这种绑定将一列绑定在了ComboBox1上了,我们也可以使用上面的方法将某列中的某行绑定在ComboBox1上。

在控件的容器Form中还有一个BindingManagerBase类对象,这个对象是用来关联关联到此窗口的DataSet的,利用下面语句可以关联这两个对象:

BindingManagerBase bmb = this . BindingContext [ ds , "Contacts" ] ;

现在可以利用bmb来操作ds,其中bmb中的Position成员是用来指定ds表中的当前行的,可以对它进行赋值,改变ds表的当前行,这样可以改变绑定到此ds的空间中显示的值。

 

对于DataSetDataTable是我们在内存中建立的数据库表的拷贝,其实没有数据库我们也可以在内存中建立一个这样的快照,其语法为:

DataSet ds = new DataSet();        // 建立一个空数据库

DataTable dt =  ds2.Tables.Add("mdb");  //建立一张表

dt.Columns.Add("01"typeof(string));   //添加一列

dt.Columns.Add("02"typeof(string));   //再添加一列

DataRow dr2 = ds2.Tables["mdb"].NewRow();  //添加一个新行

dr2[0] = "1";   //为行赋值

dr2[1] = "2";

ds2.Tables["mdb"].Rows.Add(dr2) ;    //将行添加到表中

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多