2013-05-10 67 views
0

我正在編寫登錄腳本,無法讓Convert.ToInt32()爲我工作。ASP.NET登錄,Convert.ToInt32();

的錯誤:錯誤

'System.Convert.ToInt32(object)' is a 'method' but is used like a 'type'

片段:

con.Open(); 
    string mysql; // generate an sql insert query for the database 
    mysql = "SELECT * FROM [Users] UserName='" + tbUser.Text + "'"; 
    OleDbCommand CheckUser = new OleDbCommand(mysql, con); 
    int temp = new Convert.ToInt32(CheckUser.ExecuteScalar().ToString()); 

得到任何幫助。

+1

你嘗試過'(int32)CheckUser.ExecuteScalar();'? – 2013-05-10 13:25:27

+2

呵呵看一下sql注入攻擊... – 2013-05-10 13:36:13

回答

6

失去new關鍵字:

int temp = Convert.ToInt32(CheckUser.ExecuteScalar().ToString());

你所看到的警告,因爲你想創建一個靜態方法的一個實例。通常情況下,您會創建非靜態類型的實例。

+0

工作過,謝謝:) – Chris 2013-05-10 13:31:31

+0

爲什麼你用int32?使用int16 – 2013-05-10 13:32:33

+0

雖然'short'確實會使用兩個較少的字節,但問題是關於編譯器錯誤,而不是代碼的內存使用情況。如果我們要分析問題中的所有內容,嘗試插入安全漏洞,重新分析並提高性能,我們可能會在這裏待一段時間! – greg84 2013-05-10 13:40:34

0

變化int temp = new Convert.ToInt32(CheckUser.ExecuteScalar().ToString());int temp = Convert.ToInt32(CheckUser.ExecuteScalar().ToString());

0

試試這個:

Int32 count = (Int32) CheckUser.ExecuteScalar(); 
0

您可以通過使用Select 1作爲提高性能:

con.Open(); 
string mysql; // generate an sql insert query for the database 
mysql = "SELECT 1 FROM [Users] UserName='" + tbUser.Text + "'"; 
OleDbCommand CheckUser = new OleDbCommand(mysql, con); 
int temp = Convert.ToInt32(CheckUser.ExecuteScalar()); 

SqlCommand.ExecuteScalar()返回object,所以如果價值與它匹配將1個0.

+0

你失去了列選擇,我認爲你的意思是'SELECT 1 * FROM' – 2013-05-10 14:02:08

+0

不,它是正確的,如果值會在那裏,那麼它將返回1 else else – Arshad 2013-05-10 14:02:54

+0

但他從第一行的第一列檢索值'[用戶]',我假設是試圖獲取User_ID(或任何列'tbUser.Text'中列出的人所調用的列,而不僅僅是查找用戶是否存在。因此,正確的查詢將是'SELECT top 1 User_ID FROM [Users] UserName = @ userName' – 2013-05-10 14:13:30