我有一个C#ClickOnce应用,我得到了一个' InvalidCastException;指定演员表无效'在此代码上调用存储过程时;
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'并扩展加号,我可以看到不同的表(所以我假设它连接到db ok,所以它不是ConnString导致问题),我可以看到所有表中的数据除了'用户'表。
当我展开“用户”部分并展开“结果”视图时,它会显示"展开结果视图将枚举IEnumerable"带有刷新图标。我点击刷新图标,我得到基础{system.SystemException} | {"指定的演员表无效"}。所以我猜这是返回null然后导致返回给出错误。
这段代码工作正常,但现在还没有,我不知道为什么或如何继续追踪它。我从代码备份的同时恢复了数据库,它具有与当前数据库中相同的用户表结构。
任何线索都非常感激,因为我需要尽快使用新的证书来部署当前版本。
堆栈追踪:
[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));
}
答案 0 :(得分:0)
问题最终成为数据库中的一个问题,其中一个字段被引用为int但实际上是一个字符串,导致注明了转换问题。