C#执行存储过程的简化-.NET教程,C#语言.docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
在.NET框架中,C#语言提供了多种方式来执行SQL Server中的存储过程。本文将深入探讨如何简化C#中调用存储过程的过程,特别是在处理参数时的优化方法。 通常,调用存储过程涉及以下步骤: 1. 打开数据库连接(SqlConnection)。 2. 创建SqlCommand对象,并设置其CommandText为存储过程的名称。 3. 添加SqlParameter对象到SqlCommand的Parameters集合中,为每个参数指定名称和值。 4. 执行SqlCommand(ExecuteNonQuery、ExecuteReader或ExecuteScalar)。 5. 关闭数据库连接。 6. 处理返回结果。 在传统的做法中,我们需要为每个存储过程手动创建并设置SqlParameter对象,这可能导致代码重复且难以维护。为了简化这一过程,我们可以创建一个全局信息表,存储存储过程的参数信息,这样在调用时只需提供存储过程名称和参数值即可。 以下是一种实现方法: 定义一个名为`InfoTable`的类,它继承自`NameObjectCollectionBase`,用于存储存储过程参数的名称和类型。这个类提供了一个索引器,方便获取和设置参数信息: ```csharp public class InfoTable : NameObjectCollectionBase { public object this[string key] { get { return (this.BaseGet(key)); } set { this.BaseSet(key, value); } } } ``` 然后,创建一个静态的`InfoTable`实例`procInfoTable`,用于存储所有存储过程的参数信息: ```csharp protected static InfoTable procInfoTable = new InfoTable(); ``` 在运行时,你可以预先将存储过程的参数信息添加到`procInfoTable`中,键为参数名称,值为参数类型。这样,当调用`run`方法时,可以基于存储过程名称快速查找参数信息: ```csharp public DataTable Run(string procName, object[] parms, ref int retValue) { string[] paramInfo = (string[])procInfoTable[procName]; // 检查参数信息是否已存在,不存在则抛出异常 if (paramInfo == null) { throw new Exception($"无法获取{procName}的参数信息!"); } bool bOpened = (dbConn.State == ConnectionState.Open); // 打开数据库连接 if (!bOpened && !Connect()) { return null; } // 创建SqlCommand对象,设置CommandType为StoredProcedure SqlCommand cmd = new SqlCommand(procName, dbConn); // 添加参数 for (int i = 0; i < parms.Length && i < paramInfo.Length; ++i) { cmd.Parameters.Add(new SqlParameter(paramInfo[i], parms[i])); } // 添加返回值参数 SqlParameter parmSr = new SqlParameter("return", SqlDbType.Int); parmSr.Direction = ParameterDirection.ReturnValue; cmd.Parameters.Add(parmSr); // 创建SqlDataAdapter对象,填充DataSet SqlDataAdapter adp = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); adp.Fill(ds); // 获取返回值 retValue = (int)(cmd.Parameters["return"].Value); // 关闭数据库连接 if (!bOpened) Close(); // 返回数据表 if (ds.Tables.Count > 0) return ds.Tables[0]; else return null; } ``` 在这个示例中,每个存储过程的参数列表被存储为一个字符串数组`paramInfo`。通过`procInfoTable`查找存储过程的参数信息,然后动态创建并添加SqlParameter对象,大大减少了代码的冗余。 你需要在应用程序启动时或在数据库更改时更新`procInfoTable`,确保它包含所有存储过程的最新参数信息。这可以通过查询数据库的元数据来实现,例如,可以查询`sys.parameters`和`sys.objects`系统视图来获取存储过程及其参数的信息。 总结来说,通过创建一个全局参数信息表,我们可以简化C#调用存储过程的过程,减少代码量,提高代码的可维护性。这种做法尤其适用于有大量存储过程需要调用的应用程序,能够显著降低开发和维护成本。
剩余8页未读,继续阅读
- 粉丝: 1
- 资源: 8万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot和MyBatis的社区问答系统.zip
- (源码)基于Spring Boot和WebSocket的人事管理系统.zip
- (源码)基于Spring Boot框架的云网页管理系统.zip
- (源码)基于Maude和深度强化学习的智能体验证系统.zip
- (源码)基于C语言的Papageno字符序列处理系统.zip
- (源码)基于Arduino的水质监测与控制系统.zip
- (源码)基于物联网的智能家居门锁系统.zip
- (源码)基于Python和FastAPI的Squint数据检索系统.zip
- (源码)基于Arduino的图片绘制系统.zip
- (源码)基于C++的ARMA53贪吃蛇游戏系统.zip