返回首页

我不知道WOT是计数查询的问题。它总是说,reocord存在于数据库中...

但记录不是代雷。

什么是计数SQL查询的问题..

<pre>MAcmd.CommandText = "SELECT Count(*) FROM roles Select userid,groupid from users,groups WHERE username = '" + TextBox1.Text + "' AND name = '" + TextBox2.Text + "'";

            int count =(int)MAcmd.ExecuteScalar();

            if(count>0)

            {

                Label1.Text="record exits";

            }

            else

            {

            MAcmd.CommandText = "INSERT INTO ROLES (UserId,GroupId) SELECT UserId,GroupId FROM Users, Groups WHERE username= '" + TextBox1.Text + "' AND name='" + TextBox2.Text + "'";

 

            MAcmd.ExecuteNonQuery();

            //MessageBox.Show("Inserted Sucessfully");

            Label1.Text = "inserted";

            }

            MAconn.Close();

 

回答

评论会员:ChandraRam 时间:2012/02/05
你的查询是错误的。试试这个:

{C}
这么说,是连接到的CommandText值可能不是一个好主意,没有消毒输入(TextBox1和TextBox2值)。为什么这是不可取的查找SQL注入。

你为什么有名为TextBox1和TextBox2的控件
评论会员:游客 时间:2012/02/05
:?嗨,你的第一个SELECT语句COUNT(*)是完全错误的,因为有两个的SQLquires和过滤上的用户名和第二SQL查询的名字你的第一个查询codeprelang="SQL"spanclass="code-keyword"SELECT/spanCount(*)spanclass="code-keyword"FROM/spanroles/pre/code总是返回结果为基础的数据。请对您的第一SQL查询和过滤器应用于有没有必要添加第二个SQL查询,如果您需要从另一个表中的数据,然后使用imgsrc=]
米卡Wendelius:正如你有两个不同的查询,在相同的CommandText。当此执行,其实这两个查询执行和结果集返回。然而,因为你使用的ExecuteScalar,你只得到第一个查询结果。

作为由ChandraRam建议,从一开始就删除SELECT COUNT查询。

然后另一个重要的事情。不要连接UI对象直接到一个SQL结单上的文字值。而总是使用{A}]。这适用于查询,但也insert语句。

通过使用参数,您至少有两个好处:
- 你更安全的SQL注入
- 你不必烦恼与数据类型转换(至少没有这么多)