2012-06-15 71 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,那麼這樣做的工作,我也得到了「指定強制轉換無效」。

奇怪的錯誤。

相關問題