2011-05-13 51 views
0

我建立一个迷你论坛网站..和我构建了几个表。我需要帮助与sql和数据关系表

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,两者都通过外键连接到comments表。 现在,每次用户提交评论,我想我还需要插入到UsersID字段(这是评论表中的一个int,并且该字段在用户表中增加1)。我如何插入评论,并通知其他表不要增加用户ID 1.事实上,我希望它的用户ID保持不变,为每个用户提交评论..

我该怎么做?我需要插入到一个表中的几个字段(注释),但要告知其他表,它们实际上是提交评论的同一用户。

注:我不知道任何VB,只有C#和我使用Visual Studio 2010 asp.net

+0

努力了解这里的问题,为什么插入到注释表中对其他表有什么影响? – iandayman 2011-05-13 11:42:44

+0

因为他们通过链接 – 2011-05-13 12:38:51

回答

0

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

您有两种情况,以应付插入新的评论时:

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

在第一种情况下,当您插入注释时,您将不必费心去查看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的东西,一旦你定义了你的结构,就会削减很多管道。

+0

连接我想我需要学习更多的SQL,因为我不明白所有这些值意味着什么。设置,声明...你认为有一种方法可以将SQL转换为C#。我知道这是完成的,当你使用把类表上面的表属性[表],然后使用类...但我忘了它是如何完成 – 2011-05-13 12:40:42

1

顺便说一句,你要插入的方式是一个安全问题,你可以得到SQL注入......

使用system.data.sqlclient.sqlparameters到过时的值。

+0

有没有办法将这些表转换为对象?这样我就可以用C#编程 – 2011-05-13 14:51:45

+0

LINQtoSQL将是一个解决方案...但是personnaly,我不喜欢它。如果您正在寻找优化的数据操作,您将需要构建自己的对象。 – David 2011-05-13 14:56:06

+0

你为什么不喜欢它?它有什么缺点呢?如果我使用SQL命令,那么写很多语句,这也意味着我需要开始学习SQL。我不知道sql语言! – 2011-05-13 15:18:13