2010-12-11 72 views
0

我試圖從表用戶插入表用戶id用戶ID,字段session_user,使用文本框,但它似乎不起作用..INSERT查詢內選擇?

這是我的SQL代碼,我正在使用Visual Studio並嘗試插入到SQL Server表

SqlCommand addsession = new SqlCommand 
    ("insert into dbo.session(session_user) 
    values (select user_id from dbo.users where username = '" + TextBox1.Text + "')", 
    badersql); 
+6

http://xkcd.com/327/ – Oded 2010-12-11 18:34:37

+1

你** **應該通過各種手段使用* *參數化**查詢,而不是將INSERT語句連接在一起...... – 2010-12-11 19:22:48

回答

6

你不應該使用VALUES關鍵字時,你正在做的INSERT ... SELECT

insert into dbo.session (session_user) select user_id from dbo.users ... 
+0

SqlCommand addsession = new SqlCommand(「insert into dbo.session(session_user)」從dbo.users中選擇user_id,其中username ='「+ TextBox1.Text + 「'」,badersql); ,我試圖做到這一點,但它給了我這個錯誤「關鍵字'session_user'附近的語法不正確。」 – Bader 2010-12-11 19:11:27

+0

任何人都可以幫忙嗎? – Bader 2010-12-12 17:24:21

+0

好的謝謝你的工作 – Bader 2010-12-22 14:47:25

4

如果要插入查詢的結果到另一臺,強制不要忽略關鍵字VALUES

VALUES關鍵字可以總是被要插入值的簡單SELECT 'dummy', 'value'取代,但我建議你還是使用VALUES每當你想清楚,你的結果做來自查詢。

也就是說,使用parameterized queries !!試想一下,如果有人輸入下面的文本TextBox1的:

' or 1 = 1

會發生什麼?

+0

感謝您的提示,但這個項目將在我的電腦本地,它不會被用於互聯網現在或將來,我知道參數化查詢是正確的事情要做,但現在不需要再使用它們,再次感謝 – Bader 2010-12-11 19:15:13

2

從查詢使用記錄插入此插入語句:

insert into dbo.session (session_user) 
select user_id from dbo.users where username = '" + TextBox1.Text + "' 

您可能希望做一個select top 1 userid如果你期望一個行插入像值聲明。

+0

如果您發佈了代碼或XML,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010)以精確地格式化和語法突出它! – 2010-12-11 19:21:48

0

我做到了,問題是我無法命名我的記錄session_user,所以我用se_user替換了那個問題。

感謝ü所有烏拉圭回合的幫助

所以正確的SQL語句是

insert into sessions (se_user) select USER_ID from users where username = '';