参数化SELECT ROWCOUNT sql语句

时间:2011-12-09 02:10:45

标签: c# sql

我使用的是VS2005 C#和SQL Server 2005。

我有一些SQL查询,我使用参数代替串联来转换它们以防止SQL注入。

以下是参数编辑的SELECT查询:

string loggedinuser = (User.Identity.Name);

SqlDataSource1.SelectCommand = "SELECT * FROM [UserTable] where [" + DropDownList1.Text + "] like @searchtb AND [LoggedInUser] LIKE @userlog";
SqlDataSource1.SelectParameters.Add("searchtb", "%" + searchTB.Text + "%");
SqlDataSource1.SelectParameters.Add("userlog", "%" + loggedinuser+ "%");

上面的sql查询根据搜索文本框中用户的输入搜索记录,并返回与搜索输入和数据库中的用户名匹配的结果。


我有另一个SQL查询,它也是一个 SELECT 语句。但是,这次它不使用SqlDataSource,而是使用cmd。因此,我需要一些帮助,将下面的SQL语句转换为参数形式:

string loggedinuser = (User.Identity.Name);

        string stmt = "SET ROWCOUNT 1 SELECT COUNT(*) FROM MP.dbo.UserTable where [" + DropDownList1.Text + "] like '%" + searchTB.Text + "%' AND [LoggedInUser] LIKE '%"+loggedinuser +"%'";
        int count = 0;

        using (SqlCommand cmdCount = new SqlCommand(stmt, thisConnection))
        {
                thisConnection.Open();
                count = (int)cmdCount.ExecuteScalar();
                thisConnection.Close();
        }

此SQL查询根据搜索输入和用户名搜索用户尝试搜索的记录数。如果countuser返回0值,我会在此之后提示用户。


我需要帮助将第二个SQL语句转换为参数形式。

谢谢。

2 个答案:

答案 0 :(得分:1)

尝试,

string stmt = "SELECT COUNT(*) FROM MP.dbo.UserTable where [" + DropDownList1.Text + "] 
                    like @searchTb AND [LoggedInUser] LIKE  @loggedinuser";

    int count = 0;

    using (SqlCommand cmdCount = new SqlCommand(stmt, thisConnection))
    {
            cmdCount.Parameters.Add("@searchTb",SqlDbType.VarChar,40).Value="%" + searchTB.Text + "%"; 
            cmdCount.Parameters.Add("@loggedinuser",SqlDbType.VarChar,40).Value="%" + loggedinuser + "%"; 

            thisConnection.Open();
            count = (int)cmdCount.ExecuteScalar();
            thisConnection.Close();
    }

答案 1 :(得分:0)

使用存储过程是最好的选择,但如果您不能使用它们,则此代码应该有效:

SqlDataAdapter myCommand = new SqlDataAdapter(
"SELECT au_lname, au_fname FROM Authors WHERE au_id = @au_id", conn);
SQLParameter parm = myCommand.SelectCommand.Parameters.Add("@au_id", 
                        SqlDbType.VarChar, 11);
Parm.Value = Login.Text;

这是关于SQL注入的MSDN文章。 http://msdn.microsoft.com/en-us/library/ms161953.aspx