65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 中的简单存储过程

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.56/5 (18投票s)

2006年2月1日

CPOL

2分钟阅读

viewsIcon

94258

downloadIcon

570

在你的代码中使用存储过程 - 简单如 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);
}

就是这样。 完成了!! 要使用此类中的其他方法,请遵循与上述相同的思路。 就这么简单。

© . All rights reserved.