【问题标题】:ASP.net SQL Query Problem using Repeater使用Repeater的ASP.net SQL查询问题
【发布时间】:2011-04-19 17:42:14
【问题描述】:

这是我在存储过程中的查询。我正在使用中继器来显示信息。问题是如果我搜索让我们说

Ename = Jim
ELocation = 史密斯中心
ECity = 亚特兰大

通过查询生成器,我得到了两个匹配的结果。但是当我将我的数据源绑定到转发器并添加参数时,然后尝试运行查询,我的转发器是空的。变量从文本框控件传入。此外,如果我只传入一个变量,比如标题,它就可以正常工作。但是当我尝试传入两个或更多变量时,我什么也得不到。有没有人知道该怎么做?

    @title varchar(150),
    @venue varchar(150),
    @city varchar(100),
    @state varchar(50),
    @country varchar(100),
    @desc varchar(150),
    @date smalldatetime = null
AS

SELECT     EID, EName, EDate, EDEnd, ELocation, ECity, EState, EDesc, EWebsite
FROM         esc
WHERE     (@title IS NULL OR EName LIKE '%' + @title + '%') 
           AND (@venue IS NULL OR ELocation LIKE '%' + @venue + '%')
           AND (@city IS NULL OR ECity LIKE '%' + @city + '%') 
           AND (@state IS NULL OR EState LIKE '%' + @state + '%') 
           AND (@country IS NULL OR ECountry = @country) 
           AND (@desc IS NULL OR EDesc LIKE '%' + @desc + '%') 
           AND (@date IS NULL OR EDate = @date)

点击按钮时的精简代码:

        SqlConnection conn = null;
        try
        {
            conn = new SqlConnection("");
            SqlCommand command = new SqlCommand();
            command.Connection = conn;

            command.CommandText = "seesc";
            command.CommandType = CommandType.StoredProcedure;

            SqlParameter title = new SqlParameter();
            title.ParameterName = "@title";
            title.SqlDbType = SqlDbType.VarChar;
            title.Direction = ParameterDirection.Input;
            title.Value = TitleTextBox.Text;

            //other parameters declared here

                command.Parameters.Add(title);
                //other parameters added here

                conn.Open();
                SqlDataReader reader = command.ExecuteReader();
                if (reader.HasRows)
                {
                    evrep.DataSource = reader;
                    evrep.DataBind();
                }
        }
        catch { }

【问题讨论】:

  • 一些显示如何填充中继器的代码会很有用。您是否在 Page_Load 中执行此操作,而不是将其包装在 IsPostBack 中,然后更改按钮单击事件中的参数?
  • @Dave_Stott 数据绑定似乎不是我上面提到的问题。我可以传入一个变量,我的中继器工作正常。

标签: asp.net sql sql-server-2005 repeater


【解决方案1】:

查询本身有一些错字。

       AND (@city IS NULL OR ECity LIKE '+' + @city + '%') 
       AND (@state IS NULL OR EState LIKE '+' + @state + '%')

应该是

       AND (@city IS NULL OR ECity LIKE '%' + @city + '%') 
       AND (@state IS NULL OR EState LIKE '%' + @state + '%')

另外当

       title.Value = TitleTextBox.Text;

使用该参数不会为空,但将具有空字符串的值。那将不符合条件

       AND (@country IS NULL OR ECountry = @country) 

【讨论】:

  • 前两个只是拼写错误,我无法复制和粘贴,所以我不得不再次手动编写代码,并且一定是不小心放置了 + 而不是 %。那就不要介意 IS NULL,即使我删除 IS NULL,它仍然无法工作
  • IS NULL 很好。传递的值可能不太好。您能否更新 SP 以仅将标题、地点和城市保持在 where 条件下并从客户端传递所有三个?应该会给你正确的结果。如果是这样,查询的其余部分也应该这样进行。如果这不起作用,请运行 SQL 分析器并准确​​查看正在发送到数据库的查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
相关资源
最近更新 更多