这样当然不对啦
cm.Parameters["@Subject"].Value= "%" + Subject.Text + "%";
这样吧

解决方案 »

  1.   

    string Subject;
    strSql=".... like '%"+Subject+"%'";
    @一般用在存储过程的参数,如果你直接写SQL语句的话是不需要的.
      

  2.   

    试了一下还是有问题
    我的完全源代码,看看究竟是什么地方出了问题
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <html>
    <script language="C#" runat="server">public void Search_Click(Object sender, EventArgs E) 
    {    
       // 连接到本地计算机的search数据库
       SqlConnection cn=new SqlConnection("server=localhost;initial catalog=search;uid=sa;password=sa");
       // 构造SQL语句,该语句用于查询企业信息
       String strSQL="select * "+
             "from Threads "+
             "where Subject like '%"+Subject+"%'";
       // 创建Command对象cm
       SqlCommand cm=new SqlCommand(strSQL,cn);
       // 添加一个参数
       cm.Parameters.Add(new SqlParameter("@Subject",SqlDbType.NVarChar,40));
       // 给参数赋值
       cm.Parameters["@Subject"].Value=Subject.Text;       
       // 打开连接
       cn.Open();
       // 执行ExecuteReader()方法
       SqlDataReader dr=cm.ExecuteReader();
       // 将DataReader对象绑定到DataGrid控件
       dgCust.DataSource=dr;
       dgCust.DataBind();
       // 关闭连接
       cn.Close();
    }
    </script>
    <body style="font: 10pt verdana">
    <form runat="server">
    客户名:
    <asp:TextBox id="Subject" runat="server" />
    <asp:RequiredFieldValidator id="RFV" 
           ControlTOValidate="Subject"
           Display="dynamic" runat="server">不能为空
    </asp:RequiredFieldValidator>
    <asp:Button text="查询" OnClick="Search_Click" runat="server" />
    <br><br><asp:DataGrid id="dgCust" runat="server"
           Width="100%" Border="0" Font-Size="9pt"
           ShowFooter="false" HeaderStyle-BackColor="#aaaadd"
         
           PagerStyle-Visible="false"
           AutoGenerateColumns="false">
      <Columns>
         <asp:HyperLinkColumn HeaderText="企业名称"
              DataTextFormatString="{0}"
              DataTextField="Subject"
              DataNavigateUrlField="ThdId"
              DataNavigateUrlFormatString="getthd.aspx?thdid={0}"
              Target="_blank" />
         <asp:TemplateColumn HeaderText="联系人、发布时间">
           <ItemTemplate>
             <asp:Label runat="server"
                Text='<%#DataBinder.Eval(Container.DataItem,"NickName")%>'/>&nbsp;
            
             <asp:Label runat="server"
                Text='<%#DataBinder.Eval(Container.DataItem,"SendTime","{0:s}")%>'/>
           </ItemTemplate>
         </asp:TemplateColumn>
      </Columns>
    </asp:DataGrid> 
    </form>
    </body>
    </html>
      

  3.   

    这样当然不对了,你要么
       String strSQL="select * "+
             "from Threads "+
             "where Subject like '%"+ Subject.Text +"%'";
       // 创建Command对象cm
       SqlCommand cm=new SqlCommand(strSQL,cn);
       cn.Open();
    要么
    String strSQL="select * "+
             "from Threads "+
             "where Subject like @Subject";
       // 创建Command对象cm
       SqlCommand cm=new SqlCommand(strSQL,cn);
       // 添加一个参数
       cm.Parameters.Add(new SqlParameter("@Subject",SqlDbType.NVarChar,40));
       // 给参数赋值
       cm.Parameters["@Subject"].Value= "%" + Subject.Text + "%" ;       
       // 打开连接
       cn.Open();
    两种都可以吧
      

  4.   

    cm.Parameters["@Subject"].Value=Subject.Text; 好像没有问题,很多书上都是这么写的
    cm.Parameters["@Subject"].Value= "%" + Subject.Text + "%";不知道这样写是什么意思
      

  5.   

    cm.Parameters["@Subject"].Value= "%" + Subject.Text + "%";
      

  6.   

    you try// 构造SQL语句,该语句用于查询企业信息
    String strSQL="select * "+
             "from Threads "+
             "where Subject like '"+Subject+"%'";
      

  7.   

    发分了下边这样写是正确的
    String strSQL="select * "+
             "from Threads "+
             "where Subject like @Subject";
       // 创建Command对象cm
       SqlCommand cm=new SqlCommand(strSQL,cn);
       // 添加一个参数
       cm.Parameters.Add(new SqlParameter("@Subject",SqlDbType.NVarChar,40));
       // 给参数赋值
       cm.Parameters["@Subject"].Value= "%" + Subject.Text + "%" ;       
       // 打开连接
       cn.Open();