2012-06-15 69 views
4

嗨,我努力学习LINQ,并在LINQ to SQL中我有以下异常: 这是中的LINQ操作示例代码由曼宁刊物。 什么错了?错误的LINQ to SQL:指定强制转换无效

 DataContext db = new DataContext("E:\\Mahesh\\TempFolder\\DB\\NORTHWND.MDF"); 

     var contacts = 
      from contact in db.GetTable<Contact>() 
      where contact.City == "Paris" 
      select contact; 

     foreach (Contact aContact in contacts) 
      Console.WriteLine("Bonjour " + aContact.Name); 
     Console.Read(); 
    } 
} 

[Table(Name = "Customers")] 
class Contact 
{ 
    [Column(IsPrimaryKey = true)] 
    public int CustomerID { get; set; } 
    [Column(Name = "ContactName")] 
    public string Name { get; set; } 
    [Column] 
    public string City { get; set; } 
} 

Error

异常详细信息:

System.InvalidCastException was unhandled 
HResult=-2147467262 
Message=Specified cast is not valid. 
Source=System.Data 
StackTrace: 
    at System.Data.SqlClient.SqlBuffer.get_Int32() 
    at Read_Contact(ObjectMaterializer`1) 
    at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext() 
    at LinqDemo.Program.Main(String[] args) in c:\Users\MAHESH\Desktop\TechNode\C#\MyTechDos\LinqDemo\LinqDemo\Program.cs:line 51 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 
InnerException: 
+1

Ick,是VS2012吗? – Rawling

+3

不要发布图片,但代码。 –

+0

'contact.City'是什么数据类型?你确定它是一个“串”吗? – bluevector

回答

5

如果我没有记错,在罗斯文Customers表没有CustomerID作为INT(我认为它NVARCHAR)。如果您手动编写Contact类,而不是让LINQ to SQL生成它,请确保类中的类型与数据库表中的类型匹配

编辑:从此链接http://msdn.microsoft.com/en-us/library/bb399575(v=vs.90).aspx我倾向于认为CustomerID字段是不是INT但NVARCHAR(或NCHAR为此事)

0

圣牛......这对我来说是一个杀手。

其实,这对我来说是SQL排序规则的问题,因为我在LINQ到SQL称为Dataarea有一个领域,但在我的SQL视图这个领域被称为DataArea。区域上方的甲壳是问题所在。

通常情况下,SQL是不区分的现场名称敏感,但如果你的SQL排序规则是DanishNorwegian,那么这样做的工作,我也得到了“指定强制转换无效”。

奇怪的错误。

相关问题