2011-05-13 47 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