【问题标题】:ASP.Net Linq to read database is not workingASP.Net Linq 读取数据库不起作用
【发布时间】:2023-03-20 16:27:01
【问题描述】:

嗨,我有这个链接句子我做错了什么?
供参考。这是调试后的错误。

 Dim categories = Aggregate pgmAccess In rvdDB.PgmAccesses 
   Where pgmAccess.OperatorID = RData.UserName 
   Join menuDef In rvdDB.MenuDefs On menuDef.ProgramName Equals pgmAccess.Program 
   Order By menuDef.MenuID 
   Select menuDef.ProgramDescription 
   Distinct Into ToList()

错误信息

“System.NotSupportedException”类型的异常发生在 System.Data.Linq.dll 但未在用户代码中处理

附加信息:方法'System.Object CompareObjectEqual(System.Object, System.Object, Boolean)' 没有 支持转换为 SQL。

__

“/”应用程序中的服务器错误。

方法'System.Object CompareObjectEqual(System.Object, System.Object, Boolean)' 不支持对 SQL 的转换。

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.NotSupportedException:方法'System.Object CompareObjectEqual(System.Object, System.Object, Boolean)' 没有 支持转换为 SQL。

来源错误:

第 16 行:将 rvdDB 调暗为新的 RVDDDataClassesDataContext 第 17 行: 第 18 行:暗淡类别 = 聚合 pgmAccess In rvdDB.PgmAccesses 其中 pgmAccess.OperatorID = RData.UserName 加入 menuDef 在 rvdDB.MenuDefs 上 menuDef.ProgramName 等于 pgmAccess.Program 按 menuDef.MenuID 顺序选择 menuDef.ProgramDescription Distinct Into ToList() 第 19 行:第 20 行:
categories.ForEach(AddressOf MakeButton)

源文件:C:\Users\pieterv\Documents\Visual Studio 2013\Projects\RVDMenu\RVDMenu\MenuFrm.aspx.vb 行:18

堆栈跟踪:

[NotSupportedException:方法'System.Object CompareObjectEqual(System.Object, System.Object, Boolean)' 没有 支持转换为 SQL。]
System.Data.Linq.SqlClient.Visitor.VisitMethodCall(SqlMethodCall mc) +576409 System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) +2146 System.Data.Linq.SqlClient.SqlVisitor.VisitExpression(SqlExpression 经验)+8
System.Data.Linq.SqlClient.Visitor.VisitMethodCall(SqlMethodCall mc) +115 System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) +2146 System.Data.Linq.SqlClient.SqlVisitor.VisitExpression(SqlExpression 经验)+8
System.Data.Linq.SqlClient.SqlVisitor.VisitSelectCore(SqlSelect 选择)+46
System.Data.Linq.SqlClient.Visitor.VisitSelect(SqlSelect 选择) +20
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点)+1024
System.Data.Linq.SqlClient.SqlVisitor.VisitAlias(SqlAlias a) +13
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) +457
System.Data.Linq.SqlClient.SqlVisitor.VisitSource(SqlSource 源)+8 System.Data.Linq.SqlClient.SqlVisitor.VisitJoin(SqlJoin join) +21
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) +979
System.Data.Linq.SqlClient.SqlVisitor.VisitSource(SqlSource 源)+8 System.Data.Linq.SqlClient.SqlVisitor.VisitSelectCore(SqlSelect 选择)+27
System.Data.Linq.SqlClient.Visitor.VisitSelect(SqlSelect 选择) +20
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点)+1024
System.Data.Linq.SqlClient.SqlVisitor.VisitAlias(SqlAlias a) +13
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) +457
System.Data.Linq.SqlClient.SqlVisitor.VisitSource(SqlSource 源)+8 System.Data.Linq.SqlClient.SqlVisitor.VisitSelectCore(SqlSelect 选择)+27
System.Data.Linq.SqlClient.Visitor.VisitSelect(SqlSelect 选择) +20
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点)+1024
System.Data.Linq.SqlClient.SqlVisitor.VisitAlias(SqlAlias a) +13
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) +457
System.Data.Linq.SqlClient.SqlVisitor.VisitSource(SqlSource 源)+8 System.Data.Linq.SqlClient.SqlVisitor.VisitSelectCore(SqlSelect 选择)+27
System.Data.Linq.SqlClient.Visitor.VisitSelect(SqlSelect 选择) +20
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点)+1024
System.Data.Linq.SqlClient.SqlVisitor.VisitAlias(SqlAlias a) +13
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) +457
System.Data.Linq.SqlClient.SqlVisitor.VisitSource(SqlSource 源)+8 System.Data.Linq.SqlClient.SqlVisitor.VisitSelectCore(SqlSelect 选择)+27
System.Data.Linq.SqlClient.Visitor.VisitSelect(SqlSelect 选择) +20
System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点)+1024
System.Data.Linq.SqlClient.SqlProvider.BuildQuery(ResultShape resultShape,类型 resultType,SqlNode 节点,ReadOnlyCollection1 parentParameters, SqlNodeAnnotations annotations) +588
System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations) +155
System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +132
System.Data.Linq.DataQuery
1.System.Collections.Generic.IEnumerable.GetEnumerator() +35 System.Collections.Generic.List1..ctor(IEnumerable1 集合)+7675130 System.Linq.Enumerable.ToList(IEnumerable`1 来源)+61 RVDMenu.MenuFrm.LoadCategories() 在 C:\Users\pieterv\Documents\Visual Studio 2013\项目\RVDMenu\RVDMenu\MenuFrm.aspx.vb:18
RVDMenu.MenuFrm.Page_Load(Object sender, EventArgs e) in C:\Users\pieterv\Documents\Visual Studio 2013\Projects\RVDMenu\RVDMenu\MenuFrm.aspx.vb:12
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint) +627

【问题讨论】:

  • 你知道该行的哪一部分引发了异常吗?还有你在比较对象的地方,它们是不是同一种类型,SQL 知道如何比较它们吗?
  • 对不起,我对 linq 很陌生
  • OperatorID 和 UserName 有哪些类型?
  • 运算符是来自表的字符串。用户名是一个变量
  • RData.UserName 也是字符串?还有 enuDef.ProgramName 和 pgmAccess.Program 的类型是什么?

标签: html asp.net vb.net linq


【解决方案1】:

根据您的错误:

方法 'System.Object CompareObjectEqual(System.Object, System.Object, Boolean)' 没有支持的 SQL 转换

这意味着您正在执行 SQL 不知道如何执行的对象比较。

我看到你做这个比较的地方是:

  • Where pgmAccess.OperatorID = RData.UserName
  • On menuDef.ProgramName Equals pgmAccess.Program

您需要检查这些属性的数据类型。请记住,SQL 只知道如何比较常见的数据类型,如字符串、整数、双精度数等。它不知道如何比较您创建的数据类型。

【讨论】:

  • 感谢您的帮助!
【解决方案2】:

我修复了 RData.Username 必须拥有 .tostring 的问题,现在它可以工作了。谢谢@Yuriy Galanter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多