Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无效的强制转换异常Linq到Sql_C#_Sql_Linq - Fatal编程技术网

C# 无效的强制转换异常Linq到Sql

C# 无效的强制转换异常Linq到Sql,c#,sql,linq,C#,Sql,Linq,我为我的公司(大约250名员工)编写了一些工资单软件,当您加载该软件时,它会提示您,并说数据库中添加了一名新员工。提示将强制您选择他们的类别(经理、销售、劳工等)。程序的这一部分适用于除两个使用该软件的用户之外的所有用户。这两个用户可以取消提示并继续使用软件,不会出现任何问题(为他们工作的软件部分使用与提示使用的数据库相同的数据库“AttendanceData”)。以下是他们提交“员工类别”信息时出现的错误: 指定的强制转换无效。在 System.Data.Linq.IdentityManage

我为我的公司(大约250名员工)编写了一些工资单软件,当您加载该软件时,它会提示您,并说数据库中添加了一名新员工。提示将强制您选择他们的类别(经理、销售、劳工等)。程序的这一部分适用于除两个使用该软件的用户之外的所有用户。这两个用户可以取消提示并继续使用软件,不会出现任何问题(为他们工作的软件部分使用与提示使用的数据库相同的数据库“AttendanceData”)。以下是他们提交“员工类别”信息时出现的错误:

指定的强制转换无效。在 System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManager
2.TryCreateKeyFromValues(对象[])
价值,V&V)在
System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache
2.Find(对象[] 关键字值)在 System.Data.Linq.IdentityManager.StandardIdentityManager.Find(元类型 类型,对象[]键值)位于 System.Data.Linq.CommonDataServices.GetCachedObject(元类型, 对象[]键值)位于 System.Data.Linq.ChangeProcessor.GetOtherItem(元关联关联), 对象实例)在 System.Data.Linq.ChangeProcessor.BuildEdgeMaps()位于 System.Data.Linq.ChangeProcessor.SubmitChanges(冲突模式 故障模式)在 System.Data.Linq.DataContext.SubmitChanges(冲突模式故障模式)
在System.Data.Linq.DataContext.SubmitChanges()中

下面我提供了处理此提示的代码:

using (AttendanceDataContext AttendanceData = new AttendanceDataContext())
                {
                    var attEmpTbl = AttendanceData.EMPLOYEEs.Where(i => i.ACTIVESTATUS == 0 &&
                                                                   (i.WG2 == 1 ||
                                                                   i.WG2 == 14 ||
                                                                   i.WG2 == 16 ||
                                                                   i.WG2 == 18 ||
                                                                   i.WG2 == 20 ||
                                                                   i.WG2 == 21 ||
                                                                   i.WG2 == 23 ||
                                                                   i.WG2 == 25 ||
                                                                   i.WG2 == 27 ||
                                                                   i.WG2 == 29 ||
                                                                   i.WG2 == 30 ||
                                                                   i.WG2 == 32 ||
                                                                   i.WG2 == 35 ||
                                                                   i.WG2 == 38 ||
                                                                   i.WG2 == 40 ||
                                                                   i.WG2 == 49 ||
                                                                   i.WG2 == 51 ||
                                                                   i.WG2 == 54 ||
                                                                   i.WG2 == 59)).OrderBy(i => i.WG2);
                    List<int> commEmpFilekey = new List<int>();

                    using (CommissionsDataContext CommissionData = new CommissionsDataContext())
                    {
                        commEmpFilekey = CommissionData.EmployeeLists.Select(i => i.FileKey).ToList();
                    }
                    if (commEmpFilekey.Count() > 0)
                    {
                        int records = 0;
                        int record = 1;
                        foreach (var item in attEmpTbl)
                        {
                            if (!commEmpFilekey.Contains(item.FILEKEY.Value))
                            {
                                records++;
                            }
                        }
                        foreach (var item in attEmpTbl)
                        {

                            if (!commEmpFilekey.Contains(item.FILEKEY.Value))
                            {
                                string commID;
                                using (EmployeeEntry ee = new EmployeeEntry(item.FIRSTNAME, item.LASTNAME, item.BADGE.Value, record, records, item.WG2.Value))
                                {
                                    DialogResult result = ee.ShowDialog();
                                    if (result == DialogResult.Yes)
                                    {
                                        using (CommissionsDataContext data = new CommissionsDataContext())
                                        {
                                            commID = ee.commID;
                                            EmployeeList employee = new EmployeeList { FileKey = item.FILEKEY.Value, Badge = item.BADGE.Value, CommID = commID };
                                            data.EmployeeLists.InsertOnSubmit(employee);
                                            data.SubmitChanges();
                                        }
                                    }
                                }
                                record++;
                            }
                        }
                    }
                }
使用(AttendanceDataContext AttendanceData=new AttendanceDataContext())
{
var attEmpTbl=AttendanceData.EMPLOYEEs.Where(i=>i.ACTIVESTATUS==0&&
(i.WG2==1||
i、 WG2==14||
i、 WG2==16||
i、 WG2==18||
i、 WG2==20||
i、 WG2==21||
i、 WG2==23||
i、 WG2==25||
i、 WG2==27||
i、 WG2==29||
i、 WG2==30||
i、 WG2==32||
i、 WG2==35||
i、 WG2==38||
i、 WG2==40||
i、 WG2==49||
i、 WG2==51||
i、 WG2==54||
i、 WG2==59)).OrderBy(i=>i.WG2);
List commEmpFilekey=new List();
使用(CommissionDataContext CommissionData=new CommissionDataContext())
{
commEmpFilekey=CommissionData.EmployeeLists.Select(i=>i.FileKey.ToList();
}
if(commEmpFilekey.Count()>0)
{
int记录=0;
int记录=1;
foreach(attEmpTbl中的变量项)
{
如果(!commEmpFilekey.Contains(item.FILEKEY.Value))
{
记录++;
}
}
foreach(attEmpTbl中的变量项)
{
如果(!commEmpFilekey.Contains(item.FILEKEY.Value))
{
字符串commID;
使用(EmployeeEntry=新EmployeeEntry(item.FIRSTNAME、item.LASTNAME、item.BADGE.Value、record、records、item.WG2.Value))
{
DialogResult=ee.ShowDialog();
if(result==DialogResult.Yes)
{
使用(CommissionDataContext数据=新CommissionDataContext())
{
commID=ee.commID;
EmployeeList employee=newemployeelist{FileKey=item.FileKey.Value,Badge=item.Badge.Value,CommID=CommID};
数据。员工列表。InsertOnSubmit(员工);
data.SubmitChanges();
}
}
}
记录++;
}
}
}
}

同样,除了我们的“工资单”和“人力资源”用户之外,此代码对所有用户都适用。而且,每个使用该软件的用户都使用我们的本地终端服务器,所以这两个用户的本地PC并不是没有正确的参考资料。。。我对此感到困惑…

从来不喜欢使用语句嵌套,更不用说嵌套数据上下文了。。。那会让我担心的。也许您至少可以显式地连接和断开它们,以尽可能多地防止它们(无需大量编码)