2011-12-09 88 views
0

我使用VS2005 C#和SQL Server 2005,參數化SELECT ROWCOUNT SQL語句

我有我使用的參數,而不是串連SQL注入預防轉換他們幾個SQL查詢。

下面是一個SELECT查詢是參數-ED:在搜索文本框在用戶輸入記錄基礎

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

嘗試,

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(); 
    } 
+0

謝謝,這就是我要找的。 – user1084683

+0

@AVD是否可以參數我的DropDownList1?我嘗試添加一個參數,但它沒有奏效。 – gymcode

+0

@RUiHAO - 不,Sql不能在字段名或表名上有參數。 – adatapost

1

使用存儲過程是你最好的選擇,但如果你不能使用它們,此代碼應工作:

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