【问题标题】:Getting the error "Query input must contain at least one table or query."收到错误“查询输入必须包含至少一个表或查询”。
【发布时间】:2011-08-28 22:36:12
【问题描述】:

我正在使用 Visual Studio 2010 创建一个表单,您可以在其中编辑、删除或插入来自 accessdatabase 的数据。当我尝试在 Web 浏览器中运行表单时,我收到错误“查询输入必须包含至少一个表或查询”。我相信问题出在我的代码/语法上,但我无法确定问题的原因。我在下面添加了一些代码,任何帮助/提示将不胜感激。谢谢。

<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
            DataFile="~/App_Data/database.accdb" SelectCommand="SELECT * FROM [database]"
            DeleteCommand="DELETE FROM [database] WHERE ([EmployeeID] = @EmployeeID)"
            UpdateCommand="UPDATE [database] SET [Phone]=@Phone,[FirstName] = @FirstName, [LastName]= @LastName  WHERE ([EmployeeID] = @EmployeeID)"
            InsertCommand="INSERT INTO [database] (Phone,FirstName,LastName) VALUES (@Phone,@FirstName,@LastName) WHERE ([EmployeeID] = @EmployeeID)">
            <InsertParameters>
             <asp:formparameter name="Phone" formfield="tbPhone" />
             <asp:formparameter name="FirstName"  formfield="tbFirstName" />
             <asp:formparameter name="LastName"  formfield="tbLastName" />
            </InsertParameters>
        </asp:AccessDataSource>
        <asp:GridView ID="gvEmployee" runat="server" AutoGenerateColumns="False" 
            DataSourceID="AccessDataSource1" DataKeyNames="EmployeeID"
            AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" AutoGenerateInsertButton="True"
            EmptyDataText="There are no data records to display." Width="372px">
            <Columns>
                <asp:BoundField DataField="Phone" HeaderText="Phone"
                     SortExpression="Phone" />
                <asp:BoundField DataField="FirstName" HeaderText="FirstName" 
                    SortExpression="FirstName" />
                <asp:BoundField DataField="LastName" HeaderText="LastName" 
                    SortExpression="LastName" />

            </Columns>
        </asp:GridView>        
    </td>
     </tr>
    <tr>
    <td>
        Phone Number: 
        <asp:TextBox ID="tbPhone" runat="server"></asp:TextBox><br /> 
        First Name:
        <asp:TextBox ID="tbFirstName" runat="server"></asp:TextBox> <br /> 
        Last Name:&nbsp;
        <asp:TextBox ID="tbLastName" runat="server"></asp:TextBox> <br />           
        <asp:button id="Button1" runat="server" text="New Employee" onclick="InsertEmployee" />
    </td>
    </tr>

【问题讨论】:

    标签: asp.net vb.net ms-access ado.net


    【解决方案1】:

    什么是[数据库]?那是你的表名吗?您需要指定表名,例如 PERSONS 或Employees?

    SELECT * FROM [database]
    

    试试类似的东西

    SELECT * FROM Employee
    

    现在试试这个

    SELECT Phone,FirstName,LastName,EmployeeID FROM [employees]
    

    如果可行,则意味着员工表中的某些字段无法处理...由于上述触发错误,这意味着代码无法处理 Autonum 字段。请尝试以下操作:

    SELECT Phone,FirstName,LastName,CAST(EmployeeID as INT) as EmployeeID 
           FROM [employees]
    

    尝试将 where 子句完全从 INSERT SQL 中移除

      InsertCommand="INSERT INTO [database] (Phone,FirstName,LastName) VALUES (@Phone,@FirstName,@LastName) "
    

    【讨论】:

    • 是的,数据库是我的表名。
    • 我怀疑这可能会导致问题,数据库通常是保留字。您可以将该表中的记录复制到另一个表中并更改代码以引用新表名吗?如果这样可行,那么驱动程序可能会被保留字绊倒......
    • 我有一个像你建议的那样名为员工的新表,但我仍然收到错误。
    • 您的代码看起来不错,此消息通常表示查询存在语法错误。尝试将 * 替换为您需要的 3 个字段名称,它可能是 ACCESS 无法处理的表中的数据类型...
    • 三个可见字段的数据类型为“TEXT”,EmployeeID为主键,在表中不可见,其数据类型为“AutoNumber”。所以我应该只输入“SELECT Phone,FirstName,LastName FROM [employees]”?如果最后一句的语法正确,我会收到错误消息“DataBinding:'System.Data.DataRowView' 不包含名为 'EmployeeID' 的属性。”另外,感谢所有的帮助。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多