如何在.net中使用存储过程

 .NET中访问数据库的技术是ADO.NET,它包含了所有与访问数据库相关的.NET类。

每个数据库操作都包含在个步骤:

(1)打开一个数据库连接。(前面会以SQL-Server为例,后面讲介绍通用的连库语法)

(2)执行所需的数据库操作并返回结果。

(3)关闭数据库连接。

一、用于连接SQL-Server的SqlConnection类:

每当创建一个新的数据库连接时,总是要指定至少三个重要的数据:

(1)将要连接的SQL-Server实例名

(2)访问服务器的用户授权信息

(3)所要操作的数据库

SqlConnection connection = new SqlConnection();

connection.ConnectionString = “ Server=(local)\SqlExress; ”+

“ User ID= SA; Password=qwerty; ”

“Database=” ;

Connection.Open();

上面这段代码简单明了:首先创建一个SqlConnection对象,接着设置ConnectionString属性,最后打开连接。在做任何操作之前都要先打开连接。

连接字符串包含在个重要的元素。第一个是要连接的数据库的实例的名字。在指定了服务器后,就需要提供登录到服务器所需的安全信息。上段代码表示的是SQL Server的认证模式,也可以使用Windows认证模式,用Windows认证模式时不用提供用户名和密码,因为SQL Server将使用当前登录用户的Windows登录信息。

用Windows认证登录时,需要用Integrated Security=True (或是Integrated Security=SSPI )来代替User ID= SA; Password=qwerty字符串。连接字符串最后一部分要指定所要操作的数据库。

最后,要注意的是连接字符串中有几个可以互换的同义字;如可以使用Data Source或是Data Server代替Server , 用Initial Catalog 代替Database等等。。

二、提交命令与执行存储过程

在打开一个连接后,通常需要创建一个SqlCommand对象去执行操作。

(1) 创建SqlCommand对象

Sqlcommand这个类可以将要与数据库交互的信息保存起来,它存放的是要执行的SQL查询或是存储过程的名字。

SqlCommand command = new SqlCommand();

Command.Connection = connection;

Command.CommandText = “GetDepartments”;

Command.CommandType = CommandTye.StoredProcedure;

GetDepartments是存储过程的名字,这个例子在SQL的存储过程中有介绍。

上面这段代码首先创建一个SqlCommand对象,然后设置一些属性。第一个设置的是Connection,因为每一个命令都是在特定的连接上执行的。另一个重要的属性是CommandText,即需要执行的指定命令。它也可以SQL语句。这里用的是存储过程的名字,这就将存储过程引入了ADO.NET中

在默认的情况下,CommandText属性接受的是SQL语句,因为这里提供的是存储过程名称,所以需要告诉SqlCommand对象,也就是把CommandType属性设为CommandTye.StoredProcedure。

使用输入参数

如果你看过了我在SQL中讲的存储过程的话,你应该知道好多存储过程是要引入参数的,那么怎么把参数代入呢。这就用到了Parameters 这个集合了。

SqlParameter param = command.CreateParameter();

param.ParameterName = “@DepartmentID”;

param.Value = value;

param.Type= Type.Int32;

command.Parameters.Add(param);

还有一个重要的属性是大小(Size),是用来设置那些没有固定大小的参数类型的,如VarChar.

使用输出参数

存储过程的输出参数和返回值很相似,它们在存储过程中被赋值,等存储过程执行完成后,调用该过程的函数就可以读取该值。

创建输出参数的代码如下所示:

SqlParameter param = command.CreateParameter();

param.ParameterName = “@HowManyProducts”;

param.Direction = ParameterDirection.Output;

param.Type= Type.Int32;

command.Parameters.Add(param);

这和输入参数的代码几乎一样,除了应为参数提供一个值,并将Direction属性改为ParameterDirection.Output之外。

从输出参数中获取结果

Int howManyProducts = int32.Parse(command.Parameters[“@HowManyProducts”].ToString());

用类似上面的这段代码来读取带有输出参数的存储过程的返回值。这可以在执行完存储过程并闭数据连接后,从Parameter对象中读取参数值。在本例中,ToString()用于把返回值转换成一个字符串,然后再解析或转换为整数。

(2) 执行命令和关闭连接

在创建完连接以及SqlCommand对象,并设置了各种参数后,就可以执行命令了。在执行完了数据库操作后要马上关闭连接。

SqlCommand类的三种Execute方法:

ExecuteNonQuery:用于执行不返回任何记录的SQL语句或存储过程。在数据库中执行如更新、插入、删除操作时,应使用这个方法。实际上它返回了一个整数值,用来说明受SQL语句影响的行数。

来个小例子:

connection.Open();

command.ExecuteNonQuery();

command.close();

ExecuteScalar: 它返回的也是单个值,但该返回值是从数据库中读出来的,而不是受影响的行数。它常用于选择一个值的SQL语句。如果用SELECT返回多行或多列,则使用该方法仅返回第一行第一列的数据。

ExecuteReader: 被用于返回多条记录的SELECT语句。它将返回一个包含查询结果的SqlDataReader。一个SqlDataReader对象是以向前且只读的形式逐个读取并返回结果的。SqlDataReader有利的一面是它是从数据库中取数最快的对象,不利的一面是操作前需要一个已打开连接,在它被关闭之前,无法使用同一个连接执行其它任何数据库操作。但这个可以通过把SqlDataReader读取的所有记录存入DataTable对象中解决。

DataTabler 的父类是DataSet,它是一个非常强大的对象,它像一个“内存中”的数据库。DataSet能存储数据表、它们的数据类型、表间的关系等。好多教科书中都用它保持数据,但实际上因为它的复杂的性,它会消耗许多的内存,要尽可能的避免使用它。

下面再来一个简单的例子,它将从数据库中读取一些记录并把它们保存在DataTable中:

conn.Open();

SqlDataReader reader = comm.ExecuteReader();

DataTable table = new DataTable();

table.Load(reader);

reader.Close();

conn.Close();

你可能感兴趣的:(如何在.net中使用存储过程)