c#连接sql server之面向数据编程

 

ADO.NET简介 ADO.NET是.NET Framework中不可缺少的一部分,它是一组类。通过这些类,.NET应用程序就可以访问数据库了。ADO.NET的功能非常强大,它提供了对关系数据库、XML以及其他数据存储的访问。应用程序可以通过ADO.NET技术与这些数据源进行连接,对数据进行增、删、改、查等操作
ADO.NET的主要组件 ADO.NET提供了两个组件,用来访问和处理数据:
.NET Freamwork数据提供程序和DataSet(数据集)
1、.NET Framework数据提供程序是专门为数据处理以及快速地只进、只读访问数据而设计的组件。使用它可以连接数据源、执行命令和检索结果,直接对数据源进行操作。
2、DataSet是专门为独立于任何数据源的数据访问而设计的。使用它,可以不必直接和数据源打交道,可以大批量地操作数据,也可以将数据绑定在控件上。
Connection对象 常用属性和方法

属性:
ConnectionString (设置/获取应用程序连接数据库的连接字符串)


方法:
Open() (使用ConnectionString属性所指定的设置打开数据库连接)
Close() (关闭与数据库的连接)
在ADO.NET中,如果使用.NET Framework数据提供程序操作数据库,必须显示关闭与数据库的连接,也就是说在操作完数据库后,必须调用Connection对象的Close()方法关闭连接

定义连接字符串 不同的数据库连接字符串,其格式不同。
SQL Server数据库的连接字符串格式一般为:
Data Source=服务器名;Initial Catalog = 数据库名,User ID =用户名;Pwd=密码
数据库连接字符串由多个参数组成,其中:
Data Source:指定与应用程序连接的数据库服务器的名称或IP地址。如果将本机作为应用程序的数据库服务器,则该参数的值可以是"."、"(local)"或"127.0.0.1"。
Initial Catalog:指定应用程序将要访问的数据库名称。
User ID:SQL Server数据库的用户名。
Pwd:SQL Server数据库用户名的密码。
密码如果为空,可以省略Pwd一项。
创建Connection对象 命名控件:System.Data.SqlClient;
SqlConnection con = new SqlConnection(connString);
可以将定义好的连接字符串当构造函数传给对象来创建Connection对象。
打开数据库连接,执行命令后,要确保关闭数据库连接。
Command
对象
创建Command对象 SqlCommand com = new SqlCommand(SQL语句,Connection对象);
常用属性和方法

属性:
Connection (Command对象使用的数据库连接,如果Connection对象赋给Command对象的Connection属性时,要求是已打开连接的Connection对象;如果Connection对象当构造函数传给Command对象的时候可以不需要打开连接)
CommandText (执行的Sql语句)

方法:
ExecuteNonQuery() (执行不返回行的语句,如UPDATE、INSERT、DELETE等,返回受影响行数,int类型)
ExecuteReader() (执行查询命令,返回DataReader对象)
ExecuteScalar() (返回第一行,第一列的值,通常执行使用聚合函数查询的SQL语句,返回object类型)

ExecuteScalar()方法示例代码
SqlConnection con = new SqlConnection(strConn);
try
{
    string sql = "select count(*) from Admin"
    con.Open();
    SqlCommand com = new SqlCommand(strSql,con);
    int iRet = (int)com.ExecuteScalar();
}
catch(Exception)
{
    Console.WriteLine("发生异常");
}
finally
{
    con.Close();
}

 

ExecuteReader()方法示例代码

1、调用Command对象的ExecuteReader方法创建DataReader对象
SqlDataReader dr = command.ExecuteReader();


2、调用DataReader的Read()方法逐行读取查询结果集的记录。这个方法返回一个布尔值。如果能读到一行记录返回true,否则返回false。一般配合while循环,逐行读取
while(dr.Read()){}


3、读取当前行某列的数据。可以像使用数组一样,用方括号来读取某列的值,如(type)dr[],方括号中可以是列的索引,从0开始,也可以是列名。注意:因为取到的列值是object类型的,所以必须要进行类型转换。
(string)dr["StudentName"]


4、关闭DataReader对象,调用它的Close()方法。使用DataReader读取数据时会占用数据库连接,这是必须调用Close()方法关闭DataReader,才能够用数据库连接进行其他数据库的操作。
dr.Close();

ExecuteNonQuery()方法示例代码 Command对象的ExecuteQuery()方法用于执行指定的SQL语句,如UPDATE、INSERT、DELETE,它返回的是受SQL语句影响的记录行数。
SqlConnection con = new SqlConnection(strConn);
try
{
    string sql = "insert into [Grade] values(S1)"
    con.Open();
    SqlCommand com = new SqlCommand(strSql,con);
    int iRet = com.ExecuteNonQuery();
}
catch(Exception)
{
    Console.WriteLine("发生异常");
}
finally
{
    con.Close();
}

 

DataReader对象 常用属性和方法

属性:
HasRows(表示查询是否返回结果,如果有查询结果返回true,否则返回false)
FieldCount(当前行中的列数)


方法:
Read()(前进到下一行记录。如果读到记录返回true,否则返回false)
Close()(关闭DataReader对象)

DataAdapter对象 简介 数据适配器从数据库中读取数据,是通过一个Command命令来实现的,它是数据适配器的一个属性SelectCommand。把数据放在DataSet中,需要使用DataAdapter的Fill()方法。反过来,要把DataSet中修改过的数据保存到数据库,需要使用DataAdapter的Update()方法。
常见属性和方法

属性
SelectCommand(从数据库检索数据的Command对象)


方法
Fill()(向DataSet中的表填充数据)
Update()(将DataSet中的数据提交到数据库,此方法有个限制:如果你是连接多表查询出来的数据是不能使用此方法,只有单表才能使用,所有应用范围比较小)

创建DataAdapter对象的三种方法

第一种方法:

SqlDataAdapter adapterGrade = new SqlDataAdapter(sql.dbHelper.Connection);
//第一个参数是SQL语句,第二个参数是Connection对象

第二种方法:

SqlDataAdapter adapterGrade = new SqlDataAdapter();
SqlCommand command = new SqlCommand(sql,dbHelper.Connection);
//第一个参数是SQL语句,第二个参数是Connection对象
adapterGrade.SelectCommand = command;

第三种方法:

SqlDataAdapter adapterGrade = new SqlDataAdapter();
SqlCommand command = new SqlCommand();
adapterGrade.SelectCommand = command;
adapterGrade.SelectCommand.Connection = dbHelper.Connection;
adapterGrade.SelectCommand.CommandText = sql;

经验:仔细阅读、分析多种创建DataAdapter对象查询数据的代码,你会发现这些代码的共同点是:创建一个DataAdapter对象,都与Connection、Command对象有关,并且要编写SQL语句。

在不同的代码段中,Connection对象的出现位置可能不痛。

示例代码
//查询用的Sql语句
string sql = "select * from Grade";
//查询并填充数据集
DBHelper dbHelper = new DBHelper();
DataSet ds = new DataSet();//创建数据集对象
//创建DataAdapter
SqlDataAdapter adapterGrade = new SqlDataAdapter(sql.dbHelper.Connection);
//填充数据集
adapterGrade.Fill(ds,"Grade");//第一个参数是DataSet对象,第二个参数是数据表名称字符串
foreach(DataRow row in ds.Tables[0].Rows)
{
    Console.WriteLine("{0}\t{1}",row["GradeId"],row["GradeName"]);
}
//我们使用foreach语句循环取出数据表中的每一行(DataRow),因为数据集中只填充了一个表,所以它在数据表集合中的索引是0,可以使用dataSet.Tables[0]找到它。
//在打印每一列的数据时,使用数据行对象["列名"]取出每一列的数据。

 

DataSet对象 简介 我们已经知道,当应用程序需要查询数据时,可以使用DataReader对象来读取数据,DataReader每次只读取一行数据到内存中。如果想查看100条数据,就要从数据库读100次。并且在这个过程中要一直保持和数据库的连接,而且是只读只进型的读取方法。这就给程序想再次获得读取过的数据带来了麻烦。ADO.NET提供了数据集对象来解决这个问题。利用数据集,我们可以在断开与数据库连接的情况下操作数据,可以操作来自多个相同或不同数据源的数据。
  创建DataSet DataSet位于System.Data命名空间中,创建DataSet的语法如下。
DataSet 数据集对象 = new DataSet("数据集的名称字符串");
方法中的参数是数据集的名称,可以有,也可以没有,如果没有写参数,创建的数据集的名称就默认为NewDataSet。例如
DataSet myDataSet = new DataSet();
DataSet myDataSet = new DataSet("MySchool");
异常处理 try-catch语句 语法:
try
{
     //包含可能出现异常的代码
}
catch(处理的异常类型)
{
     //处理异常的代码
}
try-catch语句是把可能出现异常的代码放在try块中。如果在程序运行过程中发生了异常,就会跳转到catch块中进行错误处理,这个过程叫做捕获了异常。如果程序执行没有发生异常,那么将会正常执行try块中的全部语句,但不会执行catch块中的语句。
  try-catcch-finally语句 语法:
try
{
    con.Open();
}
catch(Exception ex)
{
    //错误处理代码
}
finally
{
    con.Close();
}

无论是否发生异常,出现在finally块中的语句都会执行。

程序在执行了try块或catch块之后总会将控制权传递给finally块,与try块的退出方式无关。
DataSet和DataReader的用途 DataSet适用的情况:想把数据缓存在本地,供应用程序使用;想在断开数据库连接的情况下仍能使用数据;想为控件指定数据源。
DataReader适用的情况:只读取查询结果,节省内存,提高性能。
posted @ 2012-12-09 16:02  AA恶魔  阅读(744)  评论(0编辑  收藏  举报