2010-12-15 36 views
0

我試圖Select用戶名基礎上,當他登錄存儲他的登錄IP地址獲取用戶名,根據他當前的IP地址SQL

我有兩個表

  1. 用戶
  2. 會議

這裏是我的sql語句

Select users.username from users,sessions where user_id = se_user AND se_ip = '" + HttpContext.Current.Request.UserHostAddress + "'; 

我使用的DataSource Configurations一個DetailsView這裏面的SQL語句,但似乎不起作用

是什麼問題?

+0

向我求證像一個MS認證考試問題;-)。您是否嘗試使用示例IP手動運行SQL查詢?你有沒有嘗試調試點,看看'HttpContext.Current.Request.UserHostAddress'的值是什麼? – Shoban 2010-12-15 18:24:47

+0

您使用的數據庫引擎是什麼?,MySQL,SQL Server,Oracle等... – Lamak 2010-12-15 18:24:56

+2

「不起作用」不會爲SO用戶提供任何幫助您解決問題的出發點。什麼不行?你有沒有得到任何結果?它在編譯嗎? UserHostAddress是空白的嗎? – 2010-12-15 18:25:27

回答

3

那麼,對於初學者,您應該使用正確的JOIN而不是舊版本。 它看起來像你一直在比較se_ip和相同的字符串。如果您在C#中定義該語句,我認爲您的報價有問題。在SQL中簡單引用'定義一個字符串,在C#doble引用"中定義一個字符串。因此,在C#喲應該定義查詢是這樣的:

"Select users.username 
from users JOIN [sessions] 
ON users.[USER_ID] = [sessions].se_user 
where se_ip = '" + HttpContext.Current.Request.UserHostAddress + '" 
+0

仍然沒有值,我想說明,當我存儲的IP地址,我存儲了se_ip VARCHAR,這是否有任何區別? – Bader 2010-12-15 18:56:15

+0

它應該沒有什麼區別,你可以看到int SQL Server分析器你正在執行什麼查詢? – Lamak 2010-12-15 18:59:48

+0

我試着運行SQL代碼,但在SQL SERVER中,但我改變了se_ip的值「Select users.username from users JOIN [sessions] ON users。[USER_ID] = [sessions] .se_user where se_ip = CONNECTIONPROPERTY('client_net_address');,仍然沒有返回值... – Bader 2010-12-15 19:03:33

2

我會小心使用IP地址,因爲從家裏或辦公室內大多數用戶都使用動態IP地址分配。一段時間內它很可能是相同的,但如果他們碰巧得到一個新地址(調制解調器重置,離線一段時間等),那麼你不能再信任該IP地址。

我假設你已經加入了,但爲了防止任何人出現並決定使用這個想法,他們應該知道這一點。

+0

是的,我知道IP地址每7天更改一次,我認爲取決於DHCP設置,但在這裏在我的例子中,我在談論一般的方法,謝謝:) – Bader 2010-12-15 18:57:43