.NET 中的简单存储过程
在你的代码中使用存储过程 - 简单如 1,2,3
引言
我正在开发一个简单的 CMS(内容管理系统)项目,遇到了一个繁琐且耗时的过程,即定义我在 SQL 存储过程中使用的每个变量。 这是一个冗余的过程,尤其是在变量很多的时候,而且有时,或者说大多数时候,很难记住它们的数据类型。 因此,我决定开发一种更简单的方式来与存储过程通信,而无需编写大量代码来定义命令类型和使用的变量。
Using the Code
该类本身就是自描述的。 SimpleStoredProcedure
类包含三个方法。 我遵循了 .NET 的命名约定,因为我们都熟悉它们。
SimpleStoredProcedure
类及其构造函数如下
public class SimpleStoredProcedure
{
private string myConnectionString;
private SqlConnection Connection;
private SqlCommand comm;
private SqlParameter samparam;
public SimpleStoredProcedure(string ConnectionString)
{
myConnectionString=ConnectionString;
Connection = new SqlConnection(myConnectionString);
comm = new SqlCommand();
samparam = new SqlParameter();
}
第一个方法称为 ExecuteSPReader
,其功能与 .NET 中的通用 ExecuteReader
方法相同。
public DataSet ExecuteSPReader
(string StoredProcedure,string tableName, params DictionaryEntry[] ParamName)
{
comm = new SqlCommand(StoredProcedure);
comm.CommandType = CommandType.StoredProcedure;
foreach (DictionaryEntry paramV in ParamName)
{
comm.Parameters.AddWithValue(paramV.Key.ToString(), paramV.Value);
}
SqlDataAdapter resultDA = new SqlDataAdapter();
resultDA.SelectCommand = comm;
resultDA.SelectCommand.Connection = Connection;
Connection.Open();
try{
DataSet resultDS = new DataSet();
resultDA.Fill(resultDS, tableName);
}
finally{
Connection.Close();
}
return resultDS;
}
此方法接受三个参数
- 要调用的存储过程
- 获取数据的表名
- 存储过程参数列表,作为
DictionaryEntry
。
还有其他两个定义的方法,无需赘述。 它们是
ExecuteScalarSP
ExecuteNonQuerySP
用法
要使用此解决方案,需要导入 SimpleStoredProcedure 类
并使用最适合您需求的方法。
假设我们有一个 SQL 存储过程定义如下
ALTER PROCEDURE dbo.varifyGroupPermission
(
@groupNumber int
)
AS
SELECT permission FROM PERMISSION_MATRIX WHERE groupNumber=@groupNumber
我们希望在运行上述 SQL 过程时获得权限列表,并在我们的程序中使用它。
首先,我们创建一个名为 SP 的对象,例如。 然后列出我们在上面的 SQL 过程中拥有的变量,为变量赋予一个值。 如您所见,我定义了一个 DictionaryEntry
组,我无需担心此变量的类型。 使用适当的参数调用 ExecuteSPReader 方法
,并将结果保存在 DataSet
中。 现在我们可以从 DataSet
中使用其数据。
SimpleStoredProcedure SP = new SimpleStoredProcedure();
DictionaryEntry group;
group.Key = "@groupNumber";
group.Value = 2;
DataSet PermissionDS = SP.ExecuteSPReader
("varifyGroupPermission", "PERMISSION_MATRIX", group);
DataTableReader PermissionReader = PermissionDS.CreateDataReader();
while (PermissionReader.Read())
{
Permission = PermissionReader.GetString(0);
}
就是这样。 完成了!! 要使用此类中的其他方法,请遵循与上述相同的思路。 就这么简单。