2016-01-19 29 views
0

我在asp.net中搜索時遇到問題,當我嘗試在sqlserver中運行代碼或使用查詢buider時,它工作正常。但是當我在瀏覽器中運行程序時,gridview甚至沒有顯示出來。幫助PLZ。sqldatasource選擇命令沒有工作

protected void btnsearchadvance_Click(object sender, EventArgs e) 
 
     { 
 

 
      if (txtname.Text.Trim() != "") 
 
      { 
 
       search = "NmBengkel LIKE '%" + txtname.Text + "%'"; 
 
      } 
 
      if (txtaddress.Text.Trim() != "") 
 
      { 
 
       search = search + " AND Address LIKE '%" + txtaddress.Text + "%'"; 
 
      } 
 
      if (txttelp.Text.Trim() != "") 
 
      { 
 
       search = search + " AND NoTelp LIKE '%" + txttelp.Text + "%'"; 
 
      } 
 
      if (txtnote.Text.Trim() != "") 
 
      { 
 
       search = search + " AND Note LIKE '%" + txtnote.Text + "%'"; 
 
      } 
 

 
      SqlDataSource1.SelectCommand = "SELECT * FROM mst_bengkel where " + search; 
 
      
 
     }

回答

0
you can use parameterized Query like 
    _cmd = new SqlCommand(); 
    _cmd.CommandText = "prc_GetSampleData"; 
    _cmd.CommandType = CommandType.StoredProcedure; 
    _cmd.Parameters.Add("@name", SqlDbType.Varchar).Value = txtname.Text.Trim(); 
    _cmd.Parameters.Add("@address", SqlDbType.Decimal).Value = txtaddress.Text.Trim(); 
    _cmd.Parameters.Add("@telp", SqlDbType.Decimal).Value = txttelp.Text.Trim(); 
    _cmd.Parameters.Add("@note", SqlDbType.Decimal).Value = txtnote.Text.Trim(); 
    _cmd.Connection = _con; 
    _con.Open(); 

    try 
    { 
    sqlDA = new SqlDataAdapter(sqlCmd); 
    sqlDA.Fill(ds, "SampleData"); 
    } 
    catch (Exception ex) { _ex = ex; } 
       finally { if (_con.State == ConnectionState.Open) { _con.Close(); } } 





Here is the procedure 

Create procedure prc_GetSampleData 
@name varchar(50) =null, 
@address varchar(50)=null, 
@telp varchar(50)=null, 
@note varchar(50)=null 
AS 
BEGIN 
Declare @prmname varchar(50)='%%' 
Declare @prmaddress varchar(50)='%%' 
Declare @prmtelp varchar(50)='%%' 
Declare @prmnote varchar(50)='%%' 




if @name is not null 
begin 
set @[email protected] 
end 

if @address is not null 
begin 
set @[email protected] 
end 


if @telp is not null 
begin 
set @[email protected] 
end 

if @note is not null 
begin 
set @[email protected] 
end 



SELECT * FROM mst_bengkel where name Like @prmname and address like @prmaddress and telp like @prmtelp and note like @prmnote 




END 
+0

你可以給我完整的代碼放在哪裏的參數化查詢?我應該在sqlserver上做這個過程嗎? – Lia

+0

是的,你必須做出過程的例子:'prc_GetSampleData' – Shankaranand

+0

好嗎和參數化查詢? visual studio中的代碼如何? – Lia

0
Use stored procedure. 


using System.Data; 
using System.Data.SqlClient; 



#region Declaration 
    private SqlConnection _con; 
    private SqlCommand _cmd; 
    private SqlDataAdapter _sda; 
    private Exception _ex; 
    private SqlDataReader _sdr; 
#endregion 



protected void btnsearchadvance_Click(object sender, EventArgs e) 
{ 
_con = new SqlConnection(ConfigurationManager.AppSettings["connectionstring"].ToString()); 
_cmd = new SqlCommand(); 
_cmd.CommandText = "prc_GetSampleData"; 
_cmd.CommandType = CommandType.StoredProcedure; 
_cmd.Parameters.Add("@name", SqlDbType.Varchar).Value = txtname.Text.Trim(); 
_cmd.Parameters.Add("@address", SqlDbType.Decimal).Value = txtaddress.Text.Trim(); 
_cmd.Parameters.Add("@telp", SqlDbType.Decimal).Value = txttelp.Text.Trim(); 
_cmd.Parameters.Add("@note", SqlDbType.Decimal).Value = txtnote.Text.Trim(); 
_cmd.Connection = _con; 
_con.Open(); 

try 
{ 
_sda = new SqlDataAdapter(_cmd); 
_sda.Fill(ds, "SampleData"); 
} 
catch (Exception ex) { _ex = ex; } 
      finally { if (_con.State == ConnectionState.Open) { _con.Close(); } } 

} 
+0

_sda.Fill上的'ds'是指什麼? – Lia

+0

我嘗試運行時沒有try catch catch之間的代碼,因爲我仍然在'ds'上沒有引用任何錯誤,並且我得到的錯誤顯示爲_con「對象引用未設置爲對象的實例」。 – Lia

+0

我真的不知道什麼時候面臨那種錯誤 – Lia