1

我有 ac# 应用程序,它仅通过存储过程与数据库交互。我尝试了各种技术来调用存储过程。根是 SqlCommand 类,但是我想实现几件事:

  • 让c#和sql的接口更流畅,让过程调用看起来更像c#函数调用
  • 有一种简单的方法来确定是否在代码中的任何位置调用了给定的存储过程。
  • 使过程调用的创建快速而简单。

我探索了各种途径。一方面,我有一个项目,它的命名空间结构反映了存储过程的名称结构,这样我就可以从类的名称中生成存储过程的名称,并且我可以判断给定的存储过程是否正在使用中通过在命名空间树中对其进行微调。还有哪些其他体验?

4

7 回答 7

5

您应该尝试LINQ to SQL

于 2008-10-02T21:04:03.153 回答
4

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

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

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

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

于 2008-10-02T21:10:10.937 回答
3

您是否考虑过使用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()

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

于 2008-10-02T21:12:34.300 回答
1

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

公共 int Call_MySproc(int paramOne, bool paramTwo, ref int outputParam)

{

...参数处理和 sproc 调用在这里

}

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

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

于 2008-10-02T21:45:33.863 回答
0

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

于 2008-10-02T21:24:22.417 回答
0

尽管它们不是很流行,但我们使用类型化数据集作为所有存储过程的前端。

于 2008-10-02T21:56:41.387 回答
0

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

看看这个!

于 2008-10-03T01:20:35.017 回答