首页 > 解决方案 > 中继器无法识别具有运行时错误“未知类型:System.Object 值:SqlDataSource1”的数据源

问题描述

我正在尝试使用 SQLite 数据库作为中继器的数据源运行 Asp.NET 页面。当我在 Ado.NET 程序中使用 Sqlite 数据源和运行它所需的 dll 文件时,它们工作正常,但在运行时在网页(aspx)中显示以下错误:

System.Web.HttpException
Property enroll not found in System.Char
Description: HTTP 500.Error processing request.

Details: Error processing request.

堆栈跟踪:

at System.Web.UI.DataBinder.GetPropertyValue (System.Object container, System.String propName) [0x00062] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.DataBinder.Eval (System.Object container, System.String expression) [0x0005d] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.TemplateControl.Eval (System.String expression) [0x0000b] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at ASP.about_aspx.__DataBind__bctrl_4 (System.Object sender, System.EventArgs e) [0x00013] in <cda3370d68f04a978aeb173db70786cf>:0 
at System.Web.UI.Control.OnDataBinding (System.EventArgs e) [0x00023] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.Control.DataBind (System.Boolean raiseOnDataBinding) [0x00031] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.Control.DataBind () [0x00000] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.Control.DataBindChildren () [0x00030] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.Control.DataBind (System.Boolean raiseOnDataBinding) [0x0003c] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.Control.DataBind () [0x00000] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.WebControls.Repeater.DoItem (System.Int32 i, System.Web.UI.WebControls.ListItemType t, System.Object d, System.Boolean databind) [0x0004a] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.WebControls.Repeater.CreateControlHierarchy (System.Boolean useDataSource) [0x00078] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.WebControls.Repeater.OnDataBinding (System.EventArgs e) [0x00022] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.WebControls.Repeater.DataBind () [0x00000] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at WebApp.About.Page_Load (System.Object sender, System.EventArgs e) [0x00011] in <cf8ee0554811421f8f91feab1903c901>:0 
at System.Web.UI.Control.OnLoad (System.EventArgs e) [0x00023] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.Control.LoadRecursive () [0x00028] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.Page.ProcessLoad () [0x0004a] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.Page.ProcessPostData () [0x00047] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.Page.InternalProcessRequest () [0x001a1] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 
at System.Web.UI.Page.ProcessRequest (System.Web.HttpContext context) [0x0005f] in <6bd7a846f9aa4f0bae143ad0f36ee3bd>:0 

我使用的服务器是 ubuntu 18.04 上的 XSP。我已经从以下网址下载了 SQLite 程序集:https ://sourceforge.net/projects/sqlite-dotnet2/

发生此错误时,控制台会打印以下行:

Unknown type: System.Object value: SqlDataSource1

这是我的 ASPX 文件:

    <%@ Page Title="About" Language="C#" AutoEventWireup="true" src="About.aspx.cs" Inherits="WebApp.About"%>

<!DOCTYPE html>

<html lang="en">
<head runat="server">

</head>
<body>
    <p>Hello</p>

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="Data Source=sample.db;Pooling=True;Max Pool Size=100;"
    SelectCommand="SELECT [name],[enroll] FROM student;"></asp:SqlDataSource>

    <table>
        <asp:Repeater runat="server" ID="Repeater1" DataSource="SqlDataSource1">
            <HeaderTemplate>
                <tr>
                    <td>Enroll</td>
                    <td>Name</td>
                </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td><%# Eval("enroll")%></td>
                    <td><%# Eval("name")%></td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
    </table>

</body>
</html>

这是相关的 C# 文件:

    using System;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.SQLite;
    using System.IO;

    namespace WebApp
    {
      public class About : Page
      {
        protected void Page_Load(object sender, EventArgs e)
        {
          Repeater repeater = FindControl("Repeater1") as Repeater ;
          // Response.Write(Directory.GetCurrentDirectory());
          repeater.DataBind();
        }

      }
    }

我没有使用正确的数据源绑定方式吗?还是没有正确引用数据库文件?数据库文件与 .aspx 和 .cs 文件位于同一目录中,并且程序集位于名为“bin”的文件夹中。我已经使用无效的程序集名称进行了测试,SQLite 的程序集在编译时正在使用。

标签: c#asp.netsqlitexsp

解决方案


推荐阅读