最近学习ADO.NET 的一些心得
2012-06-24 12:38
246 查看
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() 打开数据的连接。
示例:
首先先定义一个数据库连接字符串
定义的字符串是根据你个人所用的数据而定,通常可以通过通过以下方式找到。点击你连接的数据右键属性查看连接字符串
二、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语句)
CommandTimeout;设置执行command对象超时时间
Connection;设置其连接字符串的对象
Parameters:传递sql语句和储存过程中的参数
其有以下属性:
DbType: 获取或设置参数的数据类型。
Direction: 获取或设置一个值,该值指示参数是否只可输入、只可输出、双向还是存储过程返回值参数。
IsNullable: 获取或设置一个值,该值指示参数是否可以为空。
ParamteterName: 获取或设置DbParamter的名称。
Size: 获取或设置列中数据的最大大小。
Value: 获取或设置该参数的值。
Notification;获取或设置一个指定与此命令绑定的 SqlNotificationRequest 对象的值。(这个不懂)
Transaction; 获取或设置在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。
三、DataReader对象
DataReader 对象是一个读取行的只读流的方式,绑定数据时比使用数据集方式性能要高。因为其是只读的,所以如果要对数据库的数据进行修改,就需要借助其他方法将所做的更改保存到数据库中。
DataReader 对象不能直接实例化,必须借组相关的Command对象的实例来创建。
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类型的值。
四、DataAdapter对象
DataAdapter对象也称为数据适配器对象,DataAdapter对象利用数据库连接对象(connection)连接的数据源,使用数据库命令对象(command)规定的操作从数据源中检索出数据送往数据集对象(DataSet),或者将数据集经过编译后的数据送回数据源。
数据适配器将数据填入数据集是调用Fill()方法,语句如下:
adapter.Fill(dataset1,"Products")填充dataset1数据集中的表
五、Dataset对象与DataTable对象
Dataset对象也称为数据集对象,Dataset对象用于表示那些村粗在内存中的数据,它们相当于内存中的一个数据库,它可以包括多个DataTable对象及DataView对象。Dataset对象主要用于管理存储在内存中的数据以及对数据的断开操作。
DataTable 是ADO.NET 库中的核心对象,就想普及的数据库的表一样,它也有行和列。
(1)数据行(DataRow)
数据行是给定数据表中的一行数据,或者说是数据表中的一条记录。DataRow对象的方法提供了对表中的数据的插入、删除、更新和查看等功能。
提取数据表行的语句如下:
DataRow dr=dt.Rows
; //dr代表数据行的对象,dt是数据集对象,n表示行的序号(从0开始)
(2)数据列(DataColumn)
数据表的数据列(又称字段)定义了表的数据结构,比如,可以用它来确定列中的数据类型和大小,还可以对其他属性进行设置。例如,确定列中的数据是否是只读的、是否是主键,是否允许为空等。
某列需要在数据行的基础上进行,语句如下:
string dc=dr.Columns["字段名"].tostring();
或
string dc=dr.Columns[i].tostring(); //i表示对应的索引
示例:
六、总结
以上是小弟这几天来对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
; //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的一些学习总结。
相关文章推荐
- 学习ASP.net 2.0控件的一些心得体会
- 今天把最近看DotNetNuke的心得写一些,希望对别人有所帮助
- Net 中使用 ADO.NET 的一些心得
- Asp.net中复合控件的一些学习心得
- 最近学习hadoop和spark的一些心得
- 学习了20个学时的C#.net,谈一些最简单的心得
- 最近学习拦截下载窗口创建的一些心得
- 黑马程序员之ADO.NET学习笔记:.NET中被大家容易忽视的问题
- 学习ASP.NET的一些学习资源
- Entity Framework 学习总结之一:ADO.NET 实体框架概述
- 学习ADO和ODBC访问数据库的一些思路整理
- jquery的一些学习心得总结
- ADO.NET学习笔记(六)
- ADO.NET事务学习小结
- 最近我遇到的一些关于asp.net开发中的问题。。
- 菜鸟学习ado.net(三)
- 关于ADO.Net连接池(Connection Pool)的一些个人见解
- httpclient的一些学习心得
- ADO.NET Entity Framework学习笔记(1)介绍[转]
- MyBatis的一些学习心得