最近学习ADO.NET 的一些心得

                    ADO.NET 几个重要对象

一、Conection对象

         Conection 对象主要是用于数据库连接。
其主要有两个属性
      1、ConectionString:表示用于打开sqlserver数据库的连接字符串
      2、state :表示当前连接的状态 主要有close和open两种状态
     三种方法
     1、public override void ChangeDatabase(string database);更改当前连接的数据库。
                    注意:所使用的数据库的登陆账号和密码必须和更改后的数据库相同
     2、public override void  close() 关闭数据的连接
     3、public override void   open()  打开数据的连接。

示例:  
 
 
   首先先定义一个数据库连接字符串
   定义的字符串是根据你个人所用的数据而定,通常可以通过通过以下方式找到。点击你连接的数据右键属性查看连接字符串




   string str="Data Source=FENG-PC\SQLEXPRESS;Initial Catalog=MSLIBRARY;Integrated Security=True"; 
   //然后创建一个Conection 对象
   SqlConnection  sqlcon=new  SqlConnection(str);   //通常Sqlconection 的对象都是和Sqcommand对象一起使用的下一个对象将用到它   
   string  sql="select * from Book";                              //用字符串定义一句sql  语句 
   SqlCommand sqlcom=new  SqlCommand (sql,sqlcon);
   sqlcon.Open();                                                              //打开数据库
   sqlcom.ExecuteNonQuery();                                       //执行一个sql语句并返回影响的行数
   sqlcon.Close();
   sqlcom.Dispose();



 二、Command对象

  Command对象主要用于对数据库进行sql句操作或者储存过程等

 其对象的创建的主要构造函数

SqlCommand com= new SqlCommand();

SqlCommand com = new SqlCommand( string sql);                                 //用sql语句初始化command实例对象

SqlCommand com = new SqlCommand(string sql,Connection con);    //用sql语句和Connection对象实例一个对象

SqlCommand (String, SqlConnection, SqlTransaction)              // 使用查询文本、 SqlConnection  以及  SqlTransaction  初始化  SqlCommand  类的新实例

 Command 主要有三个方法
  1、 public override int ExecuteNonQuery()                        执行一个sql语句并返回影响的行数  
  2、 public override SqldataReader ExecuteReader ()       执行一个查询的sql语句并返回一个DataReader对象 
  3、 public override  Object  ExecuteScalar ()                       从数据库检索单个值。这个方法主要用于统计操作(只返回结构集的第一行第一列的数据)。

Command几个重要的属性

CommandText: 获取或设置对数据源执行的文本命令。默认值为空字符串。

CommandType: 命令类型,指示或指定如何解释CommandText属性。通常有StoredProcedure(储存过程)和text(sql语句)

 com.CommandType=CommandType.Text;                 //指定类型为sql语句
 com.CommandType=CommandType.StoredProcedure;      //指定类型为储存过程

CommandTimeout;设置执行command对象超时时间
Connection;设置其连接字符串的对象

SqlCommand com= new SqlCommand();
com.Connection = str;                   //str是一个connection对象

Parameters:传递sql语句和储存过程中的参数
其有以下属性:

    DbType: 获取或设置参数的数据类型。

  Direction: 获取或设置一个值,该值指示参数是否只可输入、只可输出、双向还是存储过程返回值参数。

  IsNullable: 获取或设置一个值,该值指示参数是否可以为空。

  ParamteterName: 获取或设置DbParamter的名称。

  Size: 获取或设置列中数据的最大大小。

  Value: 获取或设置该参数的值。

       SqlConnection sql = new SqlConnection(con);
            string yourname="002";
            string text="update set user='001' from UserName where user=@user";
            SqlCommand com = new SqlCommand();
            com.CommandText = text;
            SqlParameter par = new SqlParameter("@user",SqlDbType.NChar); //设置参数类型
            par.SqlValue = yourname;                                      //传入值
            com.Parameters.Add(par);
            sql.Open();
            com.ExecuteNonQuery();
            sql.Close();
            com.Dispose();


int id;                                       //输入的id
string str="select *from student where studentId=@id";
SqlCommand com= new SqlCommand(str,sqlcon);
com.Parameters.Add("@id",id);           //下面注释的和这个是相同的功能,建议用上面这句
/*
      SqlParameter parrameter = new SqlParameter("@id", id);
      com.Parameters.Add(parrameter );
*/
com.ExecuteNonQuery();          //执行com对象并返回影响的行数
com.dispose();                          //释放com对象


Notification; 获取或设置一个指定与此命令绑定的  SqlNotificationRequest  对象的值。(这个不懂)

Transaction;  获取或设置在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。
private static void ExecuteSqlTransaction(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        SqlCommand command = connection.CreateCommand();
        SqlTransaction transaction;

        //开始执行一个本地事务
        transaction = connection.BeginTransaction("SampleTransaction");
        command.Connection = connection;
        command.Transaction = transaction;

        try
        {
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
            command.ExecuteNonQuery();
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
            command.ExecuteNonQuery();
            transaction.Commit();
            Console.WriteLine("Both records are written to database.");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
            Console.WriteLine("  Message: {0}", ex.Message);

            // 事务回调
            try
            {
                transaction.Rollback();
            }
            catch (Exception ex2)
            {
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                Console.WriteLine("  Message: {0}", ex2.Message);
            }
        }
    }
}


三、DataReader对象
                DataReader 对象是一个读取行的只读流的方式,绑定数据时比使用数据集方式性能要高。因为其是只读的,所以如果要对数据库的数据进行修改,就需要借助其他方法将所做的更改保存到数据库中。
                 DataReader 对象不能直接实例化,必须借组相关的Command对象的实例来创建。
        
 SqlDataReader reader=com.ExecuteReader(CommandBehavior.CloseConnection);
           CommandBehavior是枚举型,上面使用了其枚举的CloseConnection值,它能在关闭SqlDataReader时关闭相应的SqlConnection对象
DataReader 的常用属性
               属性                        类型                           说明
             FieldCount             int                             获取当前的行数
             HasRows              bool                         当前DataReader 是否包含一行或多行
             IsClosed                bool                        当前对象是否关闭
             Item                        object                     提供一种以列序号或列名的方式来访问DataReader数据的方法
DataReader 的常用方法
public override void close():                                    
public override bool GetBoolean(int i):    获取指定列的布尔值,注意调用这种方法是不会执行任何转换,
因此所检索的数据类型必须是正确的类型, GetBoolean 只能用来返回数据库中存放的bit类型的值,否则会发生异常
public override string GetDataTypeName(int i): 获取数据类型的名称。
public override Type GetFieldType(int i):            获取对象的数据类型的Type
public override string GetName(int i):                 获取指定列的名称
public override int GetOrdinal(string name):       在给定列名称的情况下获取序列号
public override Object GetValue(int i):                 获取以本机格式表示的指定列的值。
public override bool IsDBNull(int i):                      检查指示列的值是否与DBNull.Value的值等效
public override boll Read():                                  使SqlDataReader 前进到下一条记录

在通常情况下,使用DataReader 对象读取数据有3种方式:
(1)按照查询时列的索引引用指定的方式来读取列,无须相应的转换,如GetBit(int i)就是读取第i列的值并转换成byte的值。(不能转换时会抛出异常)
(2)按照列的索引的方式来读取,读取时并不进行值转换,比如reader[5] ,就是读取第五列的值,得到的值是object类型的。
(3)按照列名来读取,并且在读取时也不进行转换,得到的是object类型的值。
  SqlDataReader reader=com.ExecuteReader(CommandBehavior.CloseConnection);
            while(reader.Read())
            {
                  reader.GetInt32(0);       //按照第一种方式读取  注:规定相应行的类型必须与读取视点类型相同不然会抛出异常
                  reader.GetString(1);      

                  reader.GetString(2);
                  reader.GetString(3);       
                  reader[5].ToString();     //按照第二种方式读取
                  reader["name"].ToString();//按照第三种方式读取
            }
            reader.Close();



四、DataAdapter对象
           DataAdapter对象也称为数据适配器对象,DataAdapter对象利用数据库连接对象(connection)连接的数据源,使用数据库命令对象(command)规定的操作从数据源中检索出数据送往数据集对象(DataSet),或者将数据集经过编译后的数据送回数据源。
        数据适配器将数据填入数据集是调用Fill()方法,语句如下:
    
  DataTable dataTable=new DataTable();
            SqlDataAdapter adapter=new SqlDataAdapter(text,con);    //text为sql语句 con为connection对象的实例
            adapter.Fill(dataTable);
或者
adapter.Fill(dataset1,"Products")填充dataset1数据集中的表
五、Dataset对象与DataTable对象
Dataset对象也称为数据集对象,Dataset对象用于表示那些村粗在内存中的数据,它们相当于内存中的一个数据库,它可以包括多个DataTable对象及DataView对象。Dataset对象主要用于管理存储在内存中的数据以及对数据的断开操作。
DataTable 是ADO.NET 库中的核心对象,就想普及的数据库的表一样,它也有行和列。
(1)数据行(DataRow)
 数据行是给定数据表中的一行数据,或者说是数据表中的一条记录。DataRow对象的方法提供了对表中的数据的插入、删除、更新和查看等功能。
提取数据表行的语句如下:
DataRow dr=dt.Rows[n];          //dr代表数据行的对象,dt是数据集对象,n表示行的序号(从0开始)
(2)数据列(DataColumn)
数据表的数据列(又称字段)定义了表的数据结构,比如,可以用它来确定列中的数据类型和大小,还可以对其他属性进行设置。例如,确定列中的数据是否是只读的、是否是主键,是否允许为空等。
某列需要在数据行的基础上进行,语句如下:
string dc=dr.Columns["字段名"].tostring();
string dc=dr.Columns[i].tostring(); //i表示对应的索引
示例:
 public void showdata()
    {
        string con = ConfigurationManager.ConnectionStrings["UserDataConnectionString"].ConnectionString;
        SqlConnection sqlcon = new SqlConnection(con);
        string sql = "select * from work";
        SqlDataAdapter adapter = new SqlDataAdapter(sql, sqlcon);
        DataSet ds = new DataSet();
        adapter.Fill(ds);         //在调用fill方法以前,并不要求所使用的连接已经打开,其会自动打开连接,读取数据后关闭如果fill之前连接时打开,那么读取数据后连接仍然打开的!
        DataTable dt = new DataTable("name");
        dt = ds.Tables[0];
        TableHeaderRow th = new TableHeaderRow();
        foreach (DataColumn dc in dt.Columns)
        {
            TableHeaderCell cell =new TableHeaderCell();
            cell.Text = dc.ColumnName;
            th.Cells.Add(cell);
        }
        Table1.Rows.Add(th);
        foreach (DataRow row in dt.Rows)
        {
            TableRow r = new TableRow();
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                TableCell c = new TableCell();
                c.Text = row[i].ToString();
                r.Cells.Add(c);
            }
            Table1.Rows.Add(r);
        }
        dt.Dispose();
        ds.Dispose();
        adapter.Dispose();
    }


六、总结
 以上是小弟这几天来对ADO.NET的一些学习总结。

        
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值