调用存储过程

时间:2008-10-02 21:02:52

标签: c# .net sql stored-procedures

我有一个c#应用程序,它只通过存储过程与数据库连接。我已经尝试了各种调用存储过程的技术。根目录是SqlCommand类,但是我想实现几个方面:

  • 使c#和sql之间的接口更顺畅,以便过程调用看起来更像c#函数调用
  • 可以轻松确定是否在代码中的任何位置调用给定的存储过程。
  • 快速轻松地创建程序调用。

我已经探索了各种途径。在一个,我有一个项目,其命名空间结构镜像存储过程的名称结构,这样我可以从类的名称生成存储过程的名称,我可以判断给定的存储过程是否正在使用通过在命名空间树中对其进行修改。还有什么其他经历?

7 个答案:

答案 0 :(得分:5)

您应该尝试LINQ to SQL

答案 1 :(得分:4)

当存储过程是数据库的接口时,我倾向于将它们包装在反映问题域的类中,这样大多数应用程序代码都使用这些对象而不是调用存储过程,甚至不知道存储过程程序或数据库连接。应用程序对象通常在它们之间进行游戏。

我认为在您的应用程序中镜像SP是一个错误,因为通常,您的关系模型与您的应用程序域对象模型不是1-1。

例如,通常我没有表示链接表或数据库设计和规范化的其他工件的应用程序对象。这些是包含在其他对象中或由其他对象返回的对象集合。

阻抗不匹配很多,但我认为这是课程的马匹 - 让数据库做他们擅长的事情,OO模型做他们擅长的事情。

答案 2 :(得分:3)

您是否考虑过使用Enterprise Library from MS?它允许您轻松调用存储过程。我通常为每个数据库设置一个类,仅用于调用这些存储过程。然后你可以得到类似的东西(抱歉它是vb.net而不是c#):

Public Shared Function GetOrg(ByVal OrgID As Integer) As System.Data.DataSet
    Return db.ExecuteDataSet("dbo.cp_GetOrg", OrgID)
End Function

其中db定义为:

Dim db As Microsoft.Practices.EnterpriseLibrary.Data.Database = DatabaseFactory.CreateDatabase()

然后,您有一个用于调用存储过程的函数。然后,您可以在代码中搜索这一功能。

答案 3 :(得分:1)

在构建我当前的产品时,我非常想要实现的工具之一是数据库类(比如DatabaseFactory - 只是我不关心那个),这将简化我的开发并删除一些“陷阱” “。在该类中,我希望能够使用函数到sproc映射将存储过程作为真正的C#函数调用,如下所示:

public int Call_MySproc(int paramOne,bool paramTwo,ref int outputParam)

{

...参数处理和sproc调用

}

然而,尝试执行此操作时遇到的最大问题在于创建实现sproc调用的C#函数所需的工作。幸运的是,在T-SQL中创建代码生成器很容易。我从最初由Paul McKenzie创建的一个开始,然后以各种方式对其进行修改以生成我想要的C#代码。

您可以使用Google Paul McKenzie并查找原始代码生成器,或者,如果您想在mark -at-BSDIWeb.com上给我写信,我会捆绑我的SQL类库的源代码和相关的sproc代码生成器并将其放在我们的网站上。如果我收到一两个请求,我会发布它,然后回来编辑此响应,以便将其他人指向源。

答案 4 :(得分:0)

您想要的最简单的解决方案[我并不是说它比其他解决方案更好或更差]是创建数据集并将存储过程从服务器资源管理器拖到数据集设计器表面上。这将在适配器中创建可以调用并检查引用的方法。

答案 5 :(得分:0)

虽然它们不是很时髦,但我们使用Typed DataSets作为所有存储过程的前端。

答案 6 :(得分:0)

微软新的实体框架提供了您所要求的。 EF通常用于为数据库对象创建代理类,但很多人没有意识到的一件事是它还为存储过程创建代理方法(当然是自动生成的)。这允许您使用SP,就像它们是常规方法调用一样。

看看吧!

相关问题