DataContext returns 除一个表外的所有表的有效数据
DataContext returns valid data for all tables except one
我有一个 C# ClickOnce 应用程序,当我在此代码上调用存储过程时得到一个 'InvalidCastException; Specified Cast is not valid';
return (from o in db.usp_GetUserByName(userName)
select o).FirstOrDefault();
在本节中;
public Database.User GetUserByName(string userName)
{
Security.InRole(Security.User_View);
B.BudgetReporting.Database.BudgetReportingDataContext db = new B.BudgetReporting.Database.BudgetReportingDataContext(Functions.ConnString);
return (from o in db.usp_GetUserByName(userName)
select o).FirstOrDefault();
}
我认为错误实际上是在上一节中的 'db' 声明中;一旦应用程序处于调试模式并且我将鼠标悬停在 'db' 上并展开加号,我可以看到不同的 tables(所以我假设它连接到数据库正常,所以不是 ConnString 导致问题),我可以看到所有 table 中的数据,除了 'Users' table。
当我展开“用户”部分并展开 'Results view' 时,它显示 "Expanding the results view will enumerate the IEnumerable" 并带有刷新图标。我单击刷新图标,然后得到“base{system.SystemException}|{"Specified cast is not valid"}。所以我猜这是 returning null 然后导致 return 给出错误。
这段代码工作正常,但现在不行了,我不确定为什么或如何继续跟踪它。我在代码备份的同时恢复了一个数据库,它具有与当前数据库相同的用户 table 结构。
非常感谢任何线索,因为我需要尽快使用新证书部署当前版本。
堆栈跟踪:
[External Code]
B.BudgetReporting.BusinessLogic.dll!B.BudgetReporting.BusinessLogic.Service.GetUserByName(string userName) Line 1663 + 0x7a bytes C#
M.I.Beta.exe!B.BudgetReporting.Forms.Login.LoginCmd_Click(object sender, System.EventArgs e) Line 78 + 0x33 bytes C#
[External Code]
M.I.Beta.exe!B.BudgetReporting.Forms.MainMDI.checkLogin() Line 135 + 0xa bytes C#
M.I.Beta.exe!B.BudgetReporting.Forms.MainMDI.MainMDI() Line 78 + 0x8 bytes C#
M.I.Beta.exe!B.BudgetReporting.Program.Main() Line 22 + 0x15 bytes C#
[External Code]
(注意:对 M、I 和 B 进行了一些轻微的编辑,以进行一些混淆)
EDIT1:GetUserByName 是:
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.usp_GetUserByName")]
public ISingleResult<User> usp_GetUserByName([global::System.Data.Linq.Mapping.ParameterAttribute(Name="UserName", DbType="VarChar(255)")] string userName)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), userName);
return ((ISingleResult<User>)(result.ReturnValue));
}
问题最终成为数据库中的一个问题,其中一个字段被引用为 int 但实际上是一个字符串,导致注意到转换问题。
我有一个 C# ClickOnce 应用程序,当我在此代码上调用存储过程时得到一个 'InvalidCastException; Specified Cast is not valid';
return (from o in db.usp_GetUserByName(userName)
select o).FirstOrDefault();
在本节中;
public Database.User GetUserByName(string userName)
{
Security.InRole(Security.User_View);
B.BudgetReporting.Database.BudgetReportingDataContext db = new B.BudgetReporting.Database.BudgetReportingDataContext(Functions.ConnString);
return (from o in db.usp_GetUserByName(userName)
select o).FirstOrDefault();
}
我认为错误实际上是在上一节中的 'db' 声明中;一旦应用程序处于调试模式并且我将鼠标悬停在 'db' 上并展开加号,我可以看到不同的 tables(所以我假设它连接到数据库正常,所以不是 ConnString 导致问题),我可以看到所有 table 中的数据,除了 'Users' table。
当我展开“用户”部分并展开 'Results view' 时,它显示 "Expanding the results view will enumerate the IEnumerable" 并带有刷新图标。我单击刷新图标,然后得到“base{system.SystemException}|{"Specified cast is not valid"}。所以我猜这是 returning null 然后导致 return 给出错误。
这段代码工作正常,但现在不行了,我不确定为什么或如何继续跟踪它。我在代码备份的同时恢复了一个数据库,它具有与当前数据库相同的用户 table 结构。
非常感谢任何线索,因为我需要尽快使用新证书部署当前版本。
堆栈跟踪:
[External Code]
B.BudgetReporting.BusinessLogic.dll!B.BudgetReporting.BusinessLogic.Service.GetUserByName(string userName) Line 1663 + 0x7a bytes C#
M.I.Beta.exe!B.BudgetReporting.Forms.Login.LoginCmd_Click(object sender, System.EventArgs e) Line 78 + 0x33 bytes C#
[External Code]
M.I.Beta.exe!B.BudgetReporting.Forms.MainMDI.checkLogin() Line 135 + 0xa bytes C#
M.I.Beta.exe!B.BudgetReporting.Forms.MainMDI.MainMDI() Line 78 + 0x8 bytes C#
M.I.Beta.exe!B.BudgetReporting.Program.Main() Line 22 + 0x15 bytes C#
[External Code]
(注意:对 M、I 和 B 进行了一些轻微的编辑,以进行一些混淆)
EDIT1:GetUserByName 是:
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.usp_GetUserByName")]
public ISingleResult<User> usp_GetUserByName([global::System.Data.Linq.Mapping.ParameterAttribute(Name="UserName", DbType="VarChar(255)")] string userName)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), userName);
return ((ISingleResult<User>)(result.ReturnValue));
}
问题最终成为数据库中的一个问题,其中一个字段被引用为 int 但实际上是一个字符串,导致注意到转换问题。