2

データベース間でデータを転送しようとしています (MsSQL Server から MySQL へ)。ソース データベースには ~2700 のレコードがあります。そして、プログラムを実行すると、400〜600レコードごとにVSが例外をスローします。

リーダーが閉じているときに 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();

データベースから直接ではなく、リストからデータを転送しますが、同じエラーが発生しました。

手伝ってくれてありがとう。

4

2 に答える 2

0

この問題を解決するために、ソース データベースのバックアップを作成し、それを宛先データベースのあるマシンにインストールしました。その後、プログラムは問題なく実行されました。この例外が私に起こった理由をまだ理解できません。

于 2014-01-10T16:00:49.270 に答える
0

var cmd = connection.CreateCommand();

おそらく、作成中のオブジェクトを適切に破棄する必要があります。

using(var cmd = connection.CreateCommand())
{
    cmd.CommandText = ...
}
于 2013-03-16T04:59:00.847 に答える