2013-05-10 88 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