2013-03-15 62 views
3

我試圖在數據庫之間傳輸數據(從MsSQL服務器到MySQL)。源數據庫有~2700條記錄。當IM執行的程序,每一個400-600紀錄VS拋出異常:從MsSQL傳輸到MySQL錯誤

無效試圖調用IsDBNull以便當閱讀器被關閉。

代碼:

foreach (var product in products) 
     { 
      var prd = product; 

      var cmd = connection.CreateCommand(); 

      cmd.CommandText = 
       "INSERT INTO Product(CategoryID, Position, PresentItemID, Guid, ThumbX, ThumbY, " + 
       "ImgX, ImgY, Name, Description, IsAvailable, TotalStock, Price, ListPrice, Size, " + 
       "meta_tag, desc_tag, page_metatags, FreeDescription, IsVintage, OnSale, Valentine)" + 
       "VALUES(@CategoryID, @Position, @PresentItemID, @Guid, @ThumbX, @ThumbY, " + 
       "@ImgX, @ImgY, @Name, @Description, @IsAvailable, @TotalStock, @Price, @ListPrice, @Size, " + 
       "@meta_tag, @desc_tag, @page_metatags, @FreeDescription, @IsVintage, @OnSale, @Valentine)"; 

      cmd.Parameters.AddWithValue("@CategoryID", prd.CategoryID); 
      cmd.Parameters.AddWithValue("@Position", prd.Position); 
      cmd.Parameters.AddWithValue("@PresentItemID", prd.PresentItemID); 
      cmd.Parameters.AddWithValue("@Guid", prd.Guid); 
      ... 
      cmd.Parameters.AddWithValue("@IsVintage", prd.IsVintage); 
      cmd.Parameters.AddWithValue("@OnSale", prd.OnSale); 
      cmd.Parameters.AddWithValue("@Valentine", prd.Valentine); 
      cmd.ExecuteNonQuery(); 
      progressBar1.PerformStep(); 
     } 

我試圖從列表從數據庫中添加該代碼

List<Product> prd = products.ToList(); 

和傳輸數據,而不是直接的,但有同樣的錯誤。

感謝您的幫助。

回答

0

要解決這個問題,我創建的源數據庫的備份,並與目標數據庫安裝了它的機器上。然後程序執行沒有任何問題。仍然不知道爲什麼這個例外發生在我身上。

0

var cmd = connection.CreateCommand();

你可能需要妥善處理的對象被創建:

 
using(var cmd = connection.CreateCommand()) 
{ 
    cmd.CommandText = ... 
} 
+0

Command對象確實實現了IDisposable,因此您可以在使用塊中引用[SqlCommand](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.aspx)可以幫助 – 2013-03-16 05:04:14

+0

得到相同的錯誤。 – Utamaru 2013-03-18 11:57:41