您的位置:首页 > 其它

最近学习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() 打开数据的连接。

示例:


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



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的一些学习总结。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: