(C#)ADO.Net数据库对象

Posted on 2009-11-23 01:24 sen 阅读(18) 评论(0)   编辑 收藏 网摘

(摘自奇猫居-神游天地间)

数据源:通常指的是一个关系数据库,如SQLserver等
提供者对象:
____________________________________________________________________________________________________________________
1、Connection:连接对象,主要用于连接数据源,建立一个页面程序与数据库驱动的通信管道。 通过Open()方法打开连接字符串中的连接
    >> 连接字符串包含3各部分的信息:
    >> 第一部分指定要使用的供应程序或驱动程序的种类 //server=localhost
    >> 第二部分指定要使用的数据库     //database=Mydatabase
    >> 第三部分通常包含安全信息,包括用户名,密码等 //uid=foolboy;pwd=Mypasswd
    数据库连接:
      SQL Server数据库:
      SqlConnection thisConnection = new SqlConnection(@"Data Source=(local);Integrated Security=SSPI;Initial Catalog=数据库名");
      thisConnection.Open();
      //中间代码
      thisConnetion.Close();
      更通用的方法:
      string MySqlConnection="user id=sa;password=sinofindb;Database =test;data source=127.0.0.1;Connect Timeout=30";
      SqlConnection myConnection = new SqlConnection(MySqlConnection);
      myConnection.Open();
    Access数据库:
      OleDbConnection thisConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库地址");
      thisConnection.Open();
      //中间代码
      thisConnetion.Close();
    连接Oracle(也可通过OracleConnection连接)
      string MySqlConnection="Provider=MSDAORA;Data Source=db; user id=sa;password=sinofindb";
____________________________________________________________________________________________________________________
2、Command:命令对象,一个包含读写数据指令的工具
使用Command参数
    Connection    包含数据仓库连接的细节
    CommandText   要运行的命令
    CommandType   命令的类型 Sql字符或存储过程的名称
          Text   表示文本字符串sql
          TableDirect 表示表名
          StoredProcedure 表示存储过程的名称
    Parameters    Parameters对象的一个集合
______________________
    ExecuteReader
     返回一行或多行
    ExecuteNonQuery
     对 Connection 执行 Transact-SQL 语句并返回受影响的行数(int)
    ExecuteScalar
     返回单个值(如一个聚合值).返回结果集中第一行的第一列。忽略额外的列或行
    ExecuteXmlReader
     将 CommandText 发送到 Connection 并生成一个 XmlReader 对象。
______________________
    SqlCommand
      Ⅰ属性
      ①CommandText: 要执行的 Transact-SQL 语句或存储过程。默认为空字符串。
      ②CommandTimeOut: 等待命令执行的时间(以秒为单位)。默认为 30 秒。
      ③CommandType: CommandType 值之一。默认值为 Text。
      ④Connection: 与数据源的连接。默认值为空引用
      ⑤Parameters: Transact-SQL 语句或存储过程的参数。默认为空集合。
      ⑥Transaction:指定用于查询的事务处理
      ⑦UpdateRowSource:如果通过调用DataAdapter对象的Update方法来使用Command,那么该属性就用于控制影响当前DataRow的查询结果(默认值为Both)
      Ⅱ方法
      ①Cancel: 试图取消SqlCommand的执行。如果没有要取消的内容,则什么都不会发生。但如果有命令正在执行,而取消尝试失败,则不会生成异常。Cancel方法还会导致Command对象删除DataReader对象上所有未读的行。
      ②CreateParameter:为查询创建一个新参数。
      ③ExecuteNonQuery:对连接执行Transact-SQL语句并返回受影响的行数。对于 Update、Insert 和 Delete 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。
      ④ExecuteReader:将CommandText发送到Connection并生成一个SqlDataReader。public SqlDataReader ExecuteReader(CommandBehavior);
      ⑤ExecuteScalar:执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行。
      ⑥ExecuteXmlReader:将CommandText发送到Connection并生成一个XmlReader。
      ⑦PrePare:在 SQL Server 的实例上创建命令的一个准备版本。在调用 Prepare 之前,应指定要准备的语句中的每个参数的数据类型。
      ⑧ResetCommandTimeOut:将CommandTimeout属性设置为默认值30秒。
________________________________________________________________________________________


    oleDbCmd.CommandText = "Select FirstName,LastName FROM Employees Where (LastName LIKE @Find)";  
    oleDbCmd.Parameters["@Find"].Value="张三";
    ExecuteScalar()方法:
    Command中的ExecuteScalar()方法执行查询时,结果仅返回一个标量的SQL命令(标量即单一值,相对于ExecuteReader()所返回的多行,即只返回一条记录),如下
    SqlCommand thisCommand=thisConnection.CreateCommand();
    thisCommand.CommandText="select count(*) from 表";
    Object countResult=thisCommand.ExecuteScalar();
    Console.WriteLine("记录数为{0}条",countResult);
    ExecuteNonQuery()方法:
    Command中的ExecuteScalar()方法执行查询时,根本不返回任何数据的命令,只返回执行命令后数据库受影响的行数,如下
    SqlCommand thisCommand=thisConnection.CreateCommand();
    thisCommand.CommandText="update 表 set 字段=值 where .... ";
    int rowsAffected=thisCommand.ExecuteNonQuery();
    Console.WriteLine("更新的记录(受影响的记录)有{0}条",rowsAffected);
____________________________________________________________________________________________________________________
3、CommandBuilder对象:CommandBuilder  --与DateAdapter配套,用于自动生成SQL
    OleDbCommandBuilder objBuilder = new OleDbCommandBuilder(DataAdapter)
    表示告诉命令生成器可以在哪儿取到SelectCommand,以建立其他的命令.
    DataAdapter.UpdateCommand = objBuilder.GetUpdateCommand();
    DataAdapter.InsertCommand = objBuilder.GetInsertCommand();
    DataAdapter.DeleteCommand = objBuilder.GetDeleteCommand();
    注意在这种情况下,SelectCommand必需带有一个主键字段
____________________________________________________________________________________________________________________
4、DateReader对象:从数据源中读取仅能前向和只读的数据流
    Command主要用于运行命令
    DataAdapter主要用于为多个命令提供一个存储空间,在数据仓库和DataSet之间提供双向交互。
    一个Command对象只能处理查询,添加,删除,修改中的一种
    因此 DataAdapter用四个属性存储四种Command对象
    属性如下 SelectCommand,UpdateCommand,InsertCommand,DeleteCommand
    如果已经完成读取来自DataReader的数据,但仍然有大量挂起的未读结果,就在调用DataReader的Close之前先调用Command的Cancel。调用DataReader的Close会导致在关闭游标之前检索挂起的结果并清空流。调用Command的Cancel会放弃服务器上的结果,这样,DataReader在关闭的时候就不必读这些结果。如果要从Command返回输出参数,还要调用Cancel放弃它们。如果需要读取任何输出参数,不要调用Command的Cancel,只要调用DataReader的Close即可。
______________________
    SqlDataReader
      Ⅰ属性
      ①Depth:获取一个值,该值指示当前行的嵌套深度。最外层表的深度为零。SQL Server .NET Framework 数据提供程序不支持嵌套并总是返回零值。
      ②FieldCount:获取当前行中的列数。如果未放在有效的记录集中,则为 0;否则为当前行中的列数。默认值为 -1。执行不返回行的查询后,FieldCount 返回 0。
      ③HasRows:如果SqlDataReader包含一行或多行,则为true;否则为false。
      ④IsClosed:如果SqlDataReader已关闭,则为true;否则为false。
      ⑤Item:获取以本机格式表示的列的值。
      ⑥RecordsAffected:已更改、插入或删除的行数;如果没有任何行受到影响或语句失败,则为 0;-1 表示 Select 语句。
      Ⅱ方法
      ①Close:关闭SqlDataReader对象。如果返回值和查询影响的记录的数量不重要,则可以在调用Close方法前调用关联的SqlCommand对象的Cancel方法,从而减少关闭SqlDataReader所需要的时间。
      ②GetName:获取指定列的名称。
      ③GetOrdinal:在给定列名称的情况下获取列序号。
      ④GetValue:获取以本机格式表示的指定列的值。
      ⑤GetValues:获取当前行的集合中的所有属性列。
      ⑥IsDBNull:获取一个值,该值指示列中是否包含不存在的或缺少的值。如果指定的列值与DBNull等效,则为true;否则为false。
      ⑦NextResult:当读取批处理 Transact-SQL 语句的结果时,使数据读取器前进到下一个结果。如果存在多个结果集,则为 true;否则为 false。
      ⑧Read:使SqlDataReader前进到下一条记录,如果存在多个行,则为true;否则为false。必须调用Read来开始访问任何数据。在某一时间,每个关联的SqlConnection只能打开一个SqlDataReader,在上一个关闭之前,打开另一个的任何尝试都将失败。
      Ⅲ事件
   SqlParameter
      Ⅰ属性
      ①DbType:获取或设置参数的DbType。默认值为String。
      ②Direction:获取或设置一个值,该值指示参数是只可输入、只可输出、双向还是存储过程返回值参数。默认值为 Input。
      ③IsNullable:获取或设置一个值,该值指示参数是否接受空值。如果接受空值,则为 true;否则为 false。默认为 false。
      ④ParameterName:获取或设置 SqlParameter 的名称。
      ⑤Size:获取或设置列中数据的最大大小(以字节为单位)。默认值是从参数值推导出的。
      ⑥SqlDbType:获取或设置参数的SqlDbType。默认为NVarChar。SqlDBType和DbType是相互连接的。设置DBtype会将SqlDbType更改为支持的SqlDbType。
      ⑦Value:获取或设置该参数的值。默认为空。
____________________________________________________________________________________________________________________
5、DateAdapter:用于执行针对数据源的各种操作,包括更新变动的数据,填充数据集以及其他操作,用于结果从Connection传给Dataset。Fill()方法把数据拷贝到DataSet中, Update()方法把DataSet中的数据烤回数据源。
如果调用了一个SqlDataAdapter对象的Fill方法,而SelectCommand属性的Connection关闭了,那么SqlDataAdapter就会开放一个连接,然后提交查询、获取结果、最后关闭连接。如果在调用前开放了Connection,那么操作之后仍然保持开放。
    多次调用Fill方法
      刷新DataSet中的数据,最简单的解决方法就是清空DataSet(或DataTable),然后再次调用DataAdapter对象的Fill方法。
      1、属性
      ①AcceptChangeDuringFill:确定由DataAdapter所获取的行的RowState(默认为True)。
      ②DeleteCommand:获取或设置一个 Transact-SQL 语句或存储过程,以从数据集删除记录。
      ③InsertCommand:获取或设置一个 Transact-SQL 语句或存储过程,以在数据源中插入新记录。
      ④SelectCommand:获取或设置一个 Transact-SQL 语句或存储过程,用于在数据源中选择记录。
      ⑤UpdateCommand:获取或设置一个 Transact-SQL 语句或存储过程,用于更新数据源中的记录。
      ⑥TableMappings:SqlDataAdapter用来将查询的结果映射到DataSet的信息集合。
      ⑦ContinueUpdate:控制SqlDataAdapter在遇到一个错误之后是否继续提交更改(默认为false)。
      2、方法
      ①Fill:执行存储于SelectCommand中的查询,并将结果存储在DataTable中。
      ②FillSchema:为存储在SelectCommand中存储的查询获取架构信息。获取查询中的各列名称和数据类型。
      ③GetFillParameters:为SelectCommand获取一个包含着参数的数组。
      ④Update:向数据库提交存储在DataSet(或DataTable、DataRows)中的更改。该方法会返回一个整数值,其中包含着在数据存储中成功更新的行数。
      3、事件
      ①FillError:当DataAdapter遇到填充DataSet或DataTable的一个错误时,该事件被触发。
      ②RowUpdated:向数据库提交一个修改的行之后被触发。
      ③RowUpdating:向数据库提交一个修改的行之前被触发。
    DataAdapter.Update(DataSet,"表名");
    查看调用SqlDataAdapter.Fill创建的结构
    da.Fill(ds,"Orders");
    DataTable tbl = ds.Table[0];
    foreach(DataColumn col in tbl.Columns)
        Console.WriteLine(col.ColumnName);
********************************************************************************************************************
用户对象:
____________________________________________________________________________________________________________________
1、DataSet:将相关表读取到内存中,存储已读出或写入数据的地方, DataSet表示数据库中的数据,与DataReader不同它可以存储几个表和他们之间的关系。核心对象,建立多表之间的adhoc关系,可以一表中的一行和另一表的一行关联起来。
    创建DataSet对象:DataSet ds = new DataSet("DataSetName");
      ①、属性
      CaseSensitive:用于控制DataTable中的字符串比较是否区分大小写。
      DataSetName:当前DataSet的名称。如果不指定,则该属性值设置为"NewDataSet"。如果将DataSet内容写入XML文件,DataSetName是XML文件的根节点名称。
      DesignMode:如果在设计时使用组件中的DataSet,DesignMode返回True,否则返回False。
      HasErrors:表示DataSet中的DataRow对象是否包含错误。如果将一批更改提交给数据库并将DataAdapter对象的      ContinueUpdateOnError属性设置为True,则在提交更改后必须检查DataSet的HasErrors属性,以确定是否有更新失败。
      NameSpace和Prefix:指定XML命名空间和前缀
      Relations:返回一个DataRelationCollection对象。
      Tables:检查现有的DataTable对象。通过索引访问DataTable有更好的性能。
      ②、方法
      AcceptChanges和RejectChanges:接受或放弃DataSet中所有挂起更改。调用AcceptChanges时,RowState属性值为Added或Modified的所有行的RowState属性都将被设置为UnChanged.任何标记为Deleted的DataRow对象将从DataSet中删除。调用RejectChanges时,任何标记为Added的DataRow对象将会被从DataSet中删除,其他修改过的DatRow对象将返回前一状态。
      Clear:清除DataSet中所有DataRow对象。该方法比释放一个DataSet然后再创建一个相同结构的新DataSet要快。
      Clone和Copy:使用Copy方法会创建与原DataSet具有相同结构和相同行的新DataSet。使用Clone方法会创建具有相同结构的新DataSet,但不包含任何行。
      GetChanges:返回与原DataSet对象具有相同结构的新DataSet,并且还包含原DataSet中所有挂起更改的行。
      GetXml和GetXmlSchema:使用GetXml方法得到由DataSet的内容与她的架构信息转换为XML格式后的字符串。如果只希望返回架构信息,可以使用GetXmlSchema。
      HasChange:表示DataSet中是否包含挂起更改的DataRow对象。
      Merge:从另一个DataSet、DataTable或现有DataSet中的一组DataRow对象载入数据。
      ReadXml和WriteXml:使用ReadXml方法从文件、TextReader、数据流或者XmlReader中将XML数据载入DataSet中。
      Reset:将DataSet返回为未初始化状态。如果想放弃现有DataSet并且开始处理新的DataSet,使用Reset方法比创建一个DataSet的新实例好。
      ③、事件
      MergeFailed:在DataSet的Merge方法发生一个异常时触发。
____________________________________________________________________________________________________________________
      2、DataTable:代表在DataSet中的一个表,DataTable对象只能存在于至多一个DataSet对象中。如果希望将DataTable添加到多个DataSet中,就必须使用Copy方法或Clone方法。Copy方法创建一个与原DataTable结构相同并且包含相同行的新DataTable;Clone方法创建一个与原DataTable结构相同,但没有包含任何行的新DataTable。
      ①、属性
      ②、方法
      ③、事件
      ColumnChanged:在列的内容被改变之后触发
      ColumnChangding:在列的内容被改变之前触发
      RowChanged,RowChanging,RowDeleted,RowDeleting。
______________________
      将DataTable添加到DataSet对象的Table集合
      DataSet ds = new DataSet();
      DataTable tbl = new DataTable("Customers");
      ds.Tables.Add(tbl);
      DataSet ds = new DataSet();
      DataTable tbl = ds.Tables.Add("Customers");
____________________________________________________________________________________________________________________
3、DataRow:代表来自表的关联数据的一行
      ①、属性
      HasError:确定行是否包含错误。
      Item:通过指定行的列数,列的名称或DataColumn对象本身,访问列的内容。
      ItemArray:获取或设置行中所有列的值。
      RowError:返回一个包含行错误信息的字符串。
      RowState:返回DataRowState枚举中的值来表示行的当前状态。
      Table:返回DataRow对象所在的DataTable。
      ②、方法
      AcceptChanges和RejectChanges:提交和放弃挂起更改。
      BeginEdit、CancelEdit、EndEdit
      ClearErrors:清除DataRow中所有的错误。
      Delete:Delete方法实际上并不从DataRow表的Row集合中删除该DataRow。当调用DataRow对象的Delete方法时,ADO.NET将该行标记为删除,之后调用SqlDataAdapter对象的Update方法来删除其在数据库中对应的行。如果希望彻底删除DataRow,可以调用Delete方法,接着再调用它的AccepteChanges方法,还可以使用DataRowCollection对象的Remove方法完成相同的任务。
      DataTable tbl = ds.Table[0];
      DataRow row = tbl.Row[0];
      Console.WriteLine(ros["OrderID"]);
      DataTable tbl = row.Table;//row是行,row.Table返回的是row所在的表
      foreach(DataColumn col in tbl.Columns)
        Console.WriteLine(row[col]);
______________________
  添加新DataRow
      DataRow row = ds.Tables["Customers"].NewRow();
      row["CustomerID"] = "ALFKI";
      ds.Tables["Customers"].Rows.Add(row);
______________________
  修改当前行
      修改行的内容逼供内不会自动修改数据库中相应的内容,对行所做的修改被视为是随后将使用SqlDataAdapter对象来提交交给数据库的待定的更改。
      DataRow rowCustomer;
      rowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");
      if(rowCustomer == null)
      //没有查找客户
      else
      {
      rowCustomer["CompanyName"] ="NewCompanyName";
      rowCustomer["ContactName"] ="NewContactName";
      }
      //推荐使用这种方式
      DataRow rowCustomer;
      rowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");
      if(rowCustomer == null)
      //没有查找客户
      else
      {
      rowCustomer.BeginEdit();
      rowCustomer["CompanyName"] ="NewCompanyName";
      rowCustomer["ContactName"] ="NewContactName";
      rowCustomer.EndEdit();
      }
      //null表示不修改该列的数据
      obejct[] aCustomer ={null,"NewCompanyName","NewContactName",null}
      DataRow rowCustomer;
      rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
      rowCustomer.ItemArray = aCustomer;
      ③、处理DataRow的空值
      //查看是否为空
      DataRow rowCustomer;
      rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
      if(rowCustomer.IsNull("Phone"))
      Console.WriteLine("It's Null");
      else
      Console.WriteLine("It's not Null");
      //赋予空值
      rowCustomer["Phone"] = DBNull.Value;
      ④、删除DataRow
      DataRow rowCustomer;
      rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
      rowCustomer.Delete();
      ⑤、清除DataRow
      DataRow rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
      rowCustomer.ItemArray = aCustomer;
      da.Tables["Customers"].Remove(rowCustomer);
      或者
      ds.Tables["Customers"].RemoveAt(intIndex);
____________________________________________________________________________________________________________________
4、DataColumn:代表表中的一列
      ①、为DataTable添加列
      DataTable tbl = ds.Tables.Add("Orders");
      DataColumn col =tbl.Columns.Add("OrderID",typeof(int));
      col.AllowDBNull = false;
      col.MaxLength = 5;
      col.Unique = true;
      tbl.PrimaryKey = new DataColumn[]{tbl.Columns["CustomersID"]};
      ②、处理自动增量列
      DataSet ds = new DataSet();
      DataTable tbl = ds.Tables.Add("Orders");
      DataColumn col = tbl.Columns.Add("OrderID",typeof(int));
      col.AutoIncrement = true;
      col.AutoIncrementSeed = -1;
      col.AutoIncrementStep = -1;
      col.ReadOnly = true;
      ③、添加基于表达式的列
      tbl.Columns.Add("ItemTotal",typeof(Decimal),"Quantity*UnitPrice");
____________________________________________________________________________________________________________________
5、DataRelation:代表通过共享列而发生关系的两个表之间的关系
____________________________________________________________________________________________________________________
6、DataView: 表示DataSet中存储的DataTables的特定视图, 其中DataViewRowState数据视图的操作属性 包括Deleted, ModifiedCurrent,Added,Unchanged等
      foreach (DataRowView myrowview in myview)
      {
      for (int i = 0; i < myview.Table.Columns.Count; i++)
      Console.Write(myrowview [i] + "/t");
      Console.WriteLine();
      }
____________________________________________________________________________________________________________________
7、DataGrid: 等的DataSource最终只绑定到某具体DataView上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值