【问题标题】:A field or property with the name was not found on the selected data source在所选数据源上找不到具有该名称的字段或属性
【发布时间】:2011-09-20 19:03:33
【问题描述】:

我正在使用我的 SQL 数据库中的数据填充以下 DataGrid

<asp:DataGrid ID="dgUsers" BackColor="#F7F9FD" AutoGenerateColumns="false" 
 OnItemCommand="dgItemCommand" runat="server" >
  <Columns>
     <asp:BoundColumn HeaderText="Username" DataField="Username" />
     <asp:BoundColumn HeaderText="First Name" DataField="FirstName" />
     <asp:BoundColumn HeaderText="Last Name" DataField="LastName" />
     <asp:TemplateColumn HeaderText="Details">
        <ItemTemplate>
           <asp:Button runat="server" Text="Open" CommandName="OpenDetails"
                       CommandArgument='<%# Eval("Username")%>' />
        </ItemTemplate>
     </asp:TemplateColumn>
   </Columns>
</asp:DataGrid>

我从数据库中的两个不同表中获取信息,FirstName 和 LastName 来自一个表,而 Username 来自另一个表。

    cmd = new SqlCommand("storedProcedure", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("Email", email);
    cmd.Parameters.AddWithValue("FirstName", first);
    cmd.Parameters.AddWithValue("LastName", last);

    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = cmd;
    da.Fill(ds);

    dgUsers.DataSource = ds;
    dgUsers.DataBind();

我收到错误消息,即在所选数据源上找不到名为“FirstName”的字段或属性。所以它似乎正确地获得了用户名,但不是名字或姓氏。我已经检查了三倍以确保我没有拼写错误,我的表中的字段确实是 FirstName 和 LastName,以及我在下面显示的存储过程中的字段。有谁看到我在这里做错了什么?提前感谢您的帮助!

@Email varchar(MAX),
@FirstName varchar(20),
@LastName varchar(35)

AS

SELECT Username
From AgentLogin.dbo.AgentLogin
WHERE AgentNumID IN (SELECT AgentNumID FROM AgentLogin.dbo.AgentDetail WHERE
      ((CHARINDEX(@FirstName, FirstName) != 0) OR (CHARINDEX(@LastName, LastName) 
      != 0))) OR (CHARINDEX(@Email, Email) != 0)

SELECT FirstName, LastName
From AgentLogin.dbo.AgentDetail
WHERE AgentNumID IN (SELECT AgentNumID FROM AgentLogin.dbo.AgentLogin WHERE
      (CHARINDEX(@Email, Email) != 0)) OR ((CHARINDEX(@FirstName, FirstName) != 0) 
      OR (CHARINDEX(@LastName, LastName) != 0))

【问题讨论】:

    标签: c# asp.net sql stored-procedures datagrid


    【解决方案1】:

    我认为您想使用内部联接。

    选择 AgentLogin.Username、AgentDetail.FirstName、AgentDetail.LastName FROM 订单 INNER JOIN AgentLogin ON AgentDetail.AgentNumID = AgentLogin.AgentNumID

    在您尝试创建存储过程之前,请尝试从后面的代码中调用函数中的 Select。

    protected DataTable getTable()
    {
    DataTable dt = new DataTable();
    StringBuilder cmdText = new StringBuilder();
    cmdText.Append("SELECT AgentLogin.Username, AgentDetail.FirstName,    AgentDetail.LastName");
            cmdText.Append("FROM Orders INNER JOIN");
            cmdText.Append("AgentLogin ON AgentDetail.AgentNumID = AgentLogin.AgentNumID ");
    
    return dt;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多