2016-01-19 28 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