0

我正在尝试在 gridview 上显示搜索结果。我希望搜索显示姓氏和名字的结果。我正在使用带有 Subsonic 的 ASP.NET,但不知道如何修改下面的语句。我猜它在某个地方需要一个通配符?

Name: <asp:TextBox ID="txtSearchName" runat="server"></asp:TextBox> 

    GridView1.DataSource = new Select(PastAwardName.Schema.TableName + ".*", PastAwardType.Schema.TableName + ".*")
          .From(PastAwardName.Schema)
          .InnerJoin(PastAwardType.Schema.TableName, PastAwardType.Columns.VolID, PastAwardName.Schema.TableName, PastAwardName.Columns.VolID)
          .Where(PastAwardName.Columns.LName).IsEqualTo(this.txtSearchName.Text)
          .Or(PastAwardName.Columns.FName).IsEqualTo(this.txtSearchName.Text)
          .OrderAsc(PastAwardType.Columns.AwardYear)
          .ExecuteDataSet();
4

1 回答 1

1

我认为这应该有效。

您熟悉从该查询中获取生成的 SQL 吗?

SubSonic.SqlQuery q = new Select(PastAwardName.Schema.TableName + ".*", PastAwardType.Schema.TableName + ".*")
          .From(PastAwardName.Schema)
          .InnerJoin(PastAwardType.Schema.TableName, PastAwardType.Columns.VolID, PastAwardName.Schema.TableName, PastAwardName.Columns.VolID)
          .Where(PastAwardName.Columns.LName).IsEqualTo(this.txtSearchName.Text)
          .Or(PastAwardName.Columns.FName).IsEqualTo(this.txtSearchName.Text)
          .OrderAsc(PastAwardType.Columns.AwardYear);
string sql = q.BuildSqlStatement();

检查 sql 的值(在该行上有一个断点)以提供有关问题的进一步线索。

对于通配符 - 使用 ContainsString() 方法而不是像这样硬编码通配符:

.Where(PastAwardName.Columns.LName).ContainsString(this.txtSearchName.Text)

这将自动将提供程序特定的通配符添加到参数的开头和结尾。您也可以执行 StartsWith() 和 EndsWith()。

于 2009-04-29T00:46:11.407 回答