2

我正在尝试显示与输入到文本框中的姓氏匹配的所有记录。这需要在“volID”列上进行 INNER JOIN,因为有 2 个表。

<asp:TextBox ID="lName" runat="server"></asp:TextBox>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" Visible="true"></asp:GridView>
<asp:linkButton ID="btnSubmit" runat="server" onclick="btnSubmit_Click" />

后面的代码:

 protected void btnSubmit_Click(object sender, EventArgs e)
    {
            GridView1.DataSource = new Select("*")
            .From(PastAwardName.Schema)
            .InnerJoin(PastAwardName.VolIDColumn, PastAwardType.VolIDColumn)
            .Where(PastAwardName.Columns.LName).IsEqualTo(this.lName.Text)
            .ExecuteReader();

            GridView1.DataBind();
    }

我试图从 Subsonics 网站上的示例中执行此操作,但无法使其正常工作。收到以下错误。

Server Error in '/' Application. 
________________________________________
The objects "dbo.pastAwardNames" and "dbo.pastAwardNames" in the FROM clause have the same exposed names. Use correlation names to distinguish them. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: The objects "dbo.pastAwardNames" and "dbo.pastAwardNames" in the FROM clause have the same exposed names. Use correlation names to distinguish them.

Source Error: 

Line 30: 
Line 31: 
Line 32:         GridView1.DataSource = new Select("*")
Line 33:             .From(PastAwardName.Schema)
Line 34:             .InnerJoin(PastAwardName.VolIDColumn, PastAwardType.VolIDColumn)
4

7 回答 7

3

我有一个类似的问题,并通过搜索错误文本“在 FROM 子句中具有相同的公开名称”和 SubSonic 2.2 发现了这个页面。

无论如何,我想我会发布我的代码,它在 Subsonic 2.2 中完美运行并且看起来很干净..

希望有人觉得它有用,因为它让我挠了一阵子!

IDataReader reader = new SubSonic.Select(CityMapping.MasterCityColumn, CityMapping.ChildCityColumn, CityMappingTourType.TourTypeCodeColumn)
                .From<CityMapping>()
                .InnerJoin(CityMappingTourType.CityMappingIDColumn, CityMapping.IdColumn)
                .OrderAsc(CityMapping.Columns.MasterCity, CityMapping.Columns.ChildCity, CityMappingTourType.Columns.TourTypeCode)
                .ExecuteReader();
于 2011-02-16T15:54:20.027 回答
1

我认为您的加入线需要颠倒。

.InnerJoin(PastAwardName.VolIDColumn, PastAwardType.VolIDColumn)

应该

.InnerJoin(PastAwardType.VolIDColumn, PastAwardName.VolIDColumn)
于 2009-04-15T17:07:29.417 回答
1

感谢您的回复。它现在使用以下代码工作:

private void BuildGridView1()
    {
        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).Like(this.txtSearchName.Text)
              .OrderAsc(PastAwardType.Columns.AwardYear)
              .ExecuteDataSet();
    }

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        BuildGridView1();
        GridView1.PageIndex = e.NewPageIndex;
        GridView1.DataBind();
    }
于 2009-04-28T14:24:16.487 回答
0

只是偶然发现了同样的问题。问题是我不能(或至少不知道如何)在没有像 Brett 提到的那样构建 selectpart 的情况下定义连接中第二个表的列

DB.Select(Table1.Schema.TableName + "." + Table1.Columns.Id,
          Table1.Schema.TableName + "." + Table1.Columns.Name,
          Table2.Schema.TableName + "." + Table2.Columns.Caption
         ).From<Table1>()
          .LeftOuterJoin(Table2.Table1_IdColumn, Table1.IdColumn);

有效,但它会很好用

DB.Select(Table1.IdColumn, Table2.CaptionColumn)
  .From<Table2>()
  .LeftOuterJoin(Table2.Table1_IdColumn, Table1.IdColumn);

反而

于 2009-05-11T12:01:25.670 回答
0

所以这个问题的解决方案相当烦人,但它确实有效。您的代码具有这样的 join 语句:

.From(PastAwardName.Schema)
.InnerJoin(PastAwardName.VolIDColumn, PastAwardType.VolIDColumn)

如果您更改 InnerJoin 语句中的表顺序,以便您的 from 语句中的表是第二个而不是第一个,它将起作用。

.From(PastAwardName.Schema)
.InnerJoin(PastAwardType.VolIDColumn, PastAwardName.VolIDColumn)

很讨厌的行为...

于 2011-09-20T22:19:03.490 回答
0

查询似乎是正确的,不确定问题是什么。

你可以通过创建一个简单的集合来重写它,然后将它绑定到网格视图,看看你是否得到了同样的错误?

你检查过这个链接吗?

于 2009-04-14T21:45:04.393 回答
0

我认为我们在 2.2 中修复了这个问题——但我确实记得在 2.1 中也有修复。您是否尝试过使用需要四个参数的 InnerJoin 的重载?

听起来您正在使用 2.1 - 如果是这样,您可以尝试 2.2,因为我认为我们已经对此进行了修复。此外 - InnerJoin 有一些重载,您可以在其中明确告诉它要加入哪些表和列。

于 2009-04-15T02:03:21.433 回答