我使用的是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语句转换为参数形式。
谢谢。
答案 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