【问题标题】:Adding a list of tags (from UI) into database?将标签列表(来自 UI)添加到数据库中?
【发布时间】:2011-03-10 10:12:19
【问题描述】:

我正在开发这个食品食谱 asp.net c# 应用程序,我希望能够将标签列表插入到每个食谱的数据库中。因此,假设我有三个标签(南部、印第安人、秋葵汤)对应于秋葵汤配方。我如何将这三个标签从 UI 插入到数据库中?我会将它们存储在列表中,运行 foreach 并单独插入每个标签吗?我真的很想能够以某种方式使用存储过程来做到这一点。我希望这是足够的信息来提供帮助。谢谢。

顺便说一句 - 数据库已经设计好了,我只需要帮助将列表插入到表中。

【问题讨论】:

    标签: c# asp.net sql-server tsql list


    【解决方案1】:

    你说数据库已经设计好了,但是这个问题的答案可能仍然会影响设计。我的意思是,您如何保存标签,您是否有一个表格,其中一列用于配方名称,另一列具有数据类型 varchar(500),例如您存储标签的位置。在这种情况下,您可以编写一个将配方和标签作为参数的存储过程,并将其保存在所需的表中。另一种设计可能是涉及带有字段recipe_nametag 的第二个表,其中每个配方都有多个标签。在此设计中,您还可以使用上面提到的存储过程。您可以将标签作为逗号分隔的字符串发送到过程,并在过程内部将字符串拆分为标签并将它们保存到表中。在面临诸如搜索标签等任务时,每个设计决策都有自己的优点和缺点以及各种级别的技术内容。我个人更喜欢第二种方法用于更大的应用程序,因为它最终提供了更多的报告方式。

    【讨论】:

      【解决方案2】:

      这是一个设计决定,所以不同的人会有不同的想法,但这些都是我的:

      我会创建一个存储过程来一次插入一个标签。不要使用 SQL Server 来处理你的 for-each 循环——这不是它的用途。

      因此,在进行数据库调用的层(这可能是您的应用程序,或 Web 服务等中间层)有一个方法,该方法接受 List(Of RecipeTag),创建连接,然后循环遍历每个 RecipeTag调用存储过程。 (您可以将 for-each 与 Lists 一起使用,因为它们是可枚举的)。如果你这样做,那么你就不会每次都打开和关闭数据库连接,只是在开始和结束时,所以它会很快。

      RecipeTag(在我的示例中)是您创建的一些对象,您的前端可以使用它来跟踪任何其他信息(例如谁添加了它,它用于什么配方等),这是一个很好的离散容器而不用担心如何处理它。如果你愿意,你可以在这个对象中添加额外的方法来处理验证等。

      通过上述设计,您拥有:一个不知道或不关心多个对象的数据库级别,它只有一个用于插入一组值的存储过程,以及一个可以处理强集合的前端-typed 对象,以及一个在两者之间进行转换的中间层(或者可能是前端应用程序中的一个类)。

      【讨论】:

      • 这很棒,我的朋友很喜欢这个主意。谢谢。
      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      相关资源
      最近更新 更多