我建立了一个迷你论坛网站..我构建了几张桌子。
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,并且该字段在Users表中逐渐增加1)。我如何插入注释,并通知另一个表不要将UserID增加1.实际上我希望UserID对于每个提交注释的用户保持不变..
我该怎么做?我需要插入一个表中的几个字段(注释),但保持其他表通知它实际上是提交评论的同一用户。
注意:我不知道任何vb,只知道c#,我使用visual studio 2010. asp.net
答案 0 :(得分:1)
使用system.data.sqlclient.sqlparameters传递值。
答案 1 :(得分:0)
您正在创建一个非常标准的规范化结构。您的Users
表将负责控制生成的UserID
值。
插入新评论时,您有两种情况需要处理:
在第一种情况下,当您插入注释时,您不需要费心查看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这样的东西,一旦你定义了你的结构,就会减少大量的管道。