有没有办法将C#对象传递给SQL存储过程

时间:2011-12-05 01:14:28

标签: c# sql

问题的一些背景:

我有一个对象层次结构,如下所示:ER diagram of the database

每个'CallAction'将基于'ActionType'具有队列或问题 当通过网站创建工作流时,它仅限于2个级别的问题。所有这些都是在C#和SQL Server中创建的表中实现的。我现在需要找到一种方法将这一切添加到数据库中。

当我扩展网站面板(一个开源项目)时,我正在尝试遵循他们一直使用的相同标准,这意味着每次使用存储过程完成对数据库的调用。

我的问题是:有什么方法可以将'工作流'传递给SQL存储过程并处理SQL中的多个不同级别,或者我将不得不创建多个存储过程并处理不同级别的我的C#代码根据层次结构调用不同的存储过程?

我也理解我可以使用SQLCommandLinQ直接访问数据库,但如果可能,我宁愿使用存储过程。

3 个答案:

答案 0 :(得分:3)

没有SQL Server中的对象。您可以将属性作为命名参数传递给存储过程(这种方式不需要维护它们的顺序),并将存储过程放在需要它们的位置:更新,插入,删除。

对于整个工作流程,您应该使用矩阵参数。谷歌“定向网络矩阵表示”。然后,单个矩阵将表示您的所有对象及其相互之间的定向链接(1 - 向前,-1 - 向后)。如果你想获得一点点发烧友,而不是使用数字,你可以创建一个字符串matric,它存储对象名称和方向。如果将方向乘以实数,则会得到连接权重(例如概率)。

但是这一切都是一种非常倒退的方式。您应该在C#中创建这种适配器,并进行批量插入/更新。

抱歉,我无法提供更多帮助。祝你好运。

编辑,因为您的“工作流程”看起来更像是一个本体而不是真正的工作流,您可以看到SPARQL等特定于本体的SQL语言。或谷歌“在SQL数据库中存储本体”

答案 1 :(得分:2)

如果您可以用XML表示层次结构,那么您可以将其作为XML数据类型传递给存储过程。然后,proc可以使用XPath等读取XML。

答案 2 :(得分:1)

我认为 CLR存储过程可以帮助您:

http://msdn.microsoft.com/en-us/library/ms131094.aspx