【问题标题】:I need help with sql and data relation tables我需要有关 sql 和数据关系表的帮助
【发布时间】:2011-05-13 11:29:33
【问题描述】:

我建立了一个迷你论坛网站.. 我构建了一些表格。

1) 用户 2) 线程 3) 评论 4) 主题

我构建了一个函数,每次用户提交评论时都会插入评论:

         string saveComment = "INSERT INTO Comments(";
     saveComment += " UsersID, ThreadsID, Date, Comments, CommentResponse";


     saveComment += "Values('" + "','";// no idea what to insert in the UsersID
     saveComment += "" + "','";// no idea what to insert in the ThreadsID

     saveComment += DateTime.Now + "','";
     saveComment += CommenttxtBox.Text + "','";
     saveComment += commentResponseString + "')";

如您所见,这些字段具有 UsersID 和 ThreadID,它们都通过外键连接到 cmets 表。 现在,每次用户提交评论时,我想我还需要插入 UsersID 字段(这是 cmets 表中的一个 int,并且该字段在 Users 表中递增 1)。我如何插入评论,并通知另一个表不要将 UserID 增加 1。事实上,我希望每个提交评论的用户的 UserID 保持不变..

我该怎么做?我需要在一个表(cmets)中插入几个字段,但要让其他表知道提交评论的实际上是同一个用户。

注意:我不知道任何 vb,只知道 c#,我使用 Visual Studio 2010.asp.net

【问题讨论】:

  • 很难理解这里的问题,为什么插入到 Comments 表中会对其他表产生任何影响?
  • 因为它们是通过链接连接起来的

标签: asp.net sql visual-studio-2010


【解决方案1】:

顺便说一句,您插入的方式是一个安全问题,您可能会得到 SQL 注入...

使用 system.data.sqlclient.sql 参数来传递值。

【讨论】:

  • 有没有办法将这些表转换为对象?这样我就可以用c#编程了
  • LINQtoSQL 将是一个解决方案......但就个人而言,我不喜欢它。如果您正在寻找优化的数据操作,则需要构建自己的对象。
  • 你为什么不喜欢它?它的缺点是什么。如果我使用SQL命令,要写很多语句,这也意味着我需要开始学习sql。我不懂sql语言!!
  • SQL 非常简单。而 LINQ 语法也不是那么容易。 LINQ 将生成大量 sql 查询,这些查询可以在单个查询中进行简化......取决于您项目的复杂性。
  • 我读过一本关于 ADO.NET 和 linq to sql 的书。 LINQ 方法对我来说更容易,因为我习惯了 C#,而且我是 SQL 语法的新手。只需放置一条 using 语句,创建一个对象/或取回它,修改它,然后将其返回到表..简单!!
【解决方案2】:

您正在创建一个非常标准的标准化结构。您的Users 表将负责控制生成的UserID 值。

在插入新的 cmets 时有两种情况需要处理:

  1. 用户存在并已登录。
  2. 用户不存在并且是匿名的。

在第一种情况下,当您插入 cmets 时,您无需费心查看Users 表。这假设您已经加载了UserID(因为用户已登录)。

在第二种情况下,您首先需要在Users 表中创建一个新行并返回该表生成的UserID(假设您使用的是标识列)。然后,您可以将此值传递给Comments 表。

以下脚本是解决第二种情况的示例:

DECLARE @userId int

INSERT INTO Users (Username, FirstName)
VALUES ('adamh', 'Adam')

SET @userId = SCOPE_IDENTITY()

INSERT INTO Comments(UserId, ThreadId, Comment)
VALUES (@userId, 1, 'My comment')

如果您想继续当前的编码风格,只需将值连接到字符串的相关部分。

但是,如果您拥有的结构是定义明确的结构,我建议您使用 Entity Framework 4.0 或 LINQ to SQL 之类的东西,一旦您定义了结构,它就会减少很多工作。

【讨论】:

  • 我想我需要学习更多的 sql,因为我不明白所有这些值的含义。设置,声明...你认为有一种方法可以将 SQL 转换为 C#。我知道它已经完成了,当您使用将表属性 [table] 放在一个类之上,然后使用该类.. 但我忘记了它是如何完成的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
相关资源
最近更新 更多