0

あるデータベースからいくつかのデータを読み取り、それにいくつかの変更を加えて別のデータベースにコピーするためのac#コンソールアプリケーションを作成しています。画像を除くすべてのデータが期待どおりにコピーされます。

私のコードは次のようなものです。

private static DataTable ExecuteQueryAndGetDataTableForMultiSiteDB(string query, SqlConnection ConnectionToMultiSiteDB, SqlTransaction Transaction)
{
    try
    {
        SqlCommand Command = new SqlCommand(query, ConnectionToMultiSiteDB,Transaction);
        DataTable Result = new DataTable();
        SqlDataReader Reader = Command.ExecuteReader();
        Result.Load(Reader);
        return Result;
    }
    catch (Exception ex)
    {
        Console.WriteLine("An error occured while executing the query \n " + query);
        Console.WriteLine(ex.Message);
        throw ex;
    }
}

すべてうまくいっているが、画像が完全にコピーされていない. このような画像データの一部だけがコピーされている = 0x53797374656D2E427974655B5D

実際の画像の長さは 100 万文字のようですが、使用している各データテーブルの列には特定の制限があるため、これが起こっていると思います。誰かがこの状況を克服するのを手伝ってくれますか?

4

1 に答える 1

0

Blob または VarBinary フィールドから大量のデータを読み取るシステムの場合、DataAdapter ではなく DataReader を使用することが常に最善です (Jason が前述したように)。

また、ソース データベースによっては、列も指定する必要があります。

"*" を使用すると遅延が発生し、LAST 列として選択されていない限り、Blob フィールドとメモ フィールドが切り捨てられる Jet データベース (つまり、MS Access など) から読み取るときに問題が発生する可能性があります。

特に画像のサイズが数 KB を超える場合は、画像データの各行を反復処理する方がはるかに優れています。

テーブル構造(およびデータベースの種類)で質問を更新すると、この回答を修正して詳細情報を提供します。

于 2013-05-31T14:07:58.463 に答える