2016-04-08 13 views
-2
objDataTable=ConversionClass.ConvertToDataTable(strFilePath,"tbl_transactonData", ",");  String strConnectionString =ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString; 

     SqlBulkCopy bulkCopy = new SqlBulkCopy(strConnectionString); 
     bulkCopy.DestinationTableName = "tbl_AllTransactiondata"; 
     try 
     { 
      bulkCopy.WriteToServer(objDataTable); 
     } 
     catch (Exception ex) 
     { 

     } 
     finally 
     { 
      bulkCopy.Close(); 
     } 

SqlBulkCopyを使用してデータテーブルからSqlテーブルに値を転送する必要があります。 しかし、SqlBulkCopyは適切な順序で行を挿入していません。同じ解決策を提案してください。SqlBulkCopyは、Sql Serverの.net DataTableからSqlテーブルへの行を同じ順序で挿入していません。

+0

どのように結果の順序が間違っていると判断しましたか?すべてのターゲットデータが挿入されている限り、挿入される順番はどうして重要なのですか?ここでSQLテーブル内での順序付けについての基本的な誤解があります。 –

+0

@EsotericScreenName ,,,,私はexcelからdatatableへの値を転送してからsql Table ,,,,,これらはトランザクションデータの順序は重要です。ここではデータテーブルの順序を調べたときは正しいが、sqlbulkcopyの順序は正しくない正しい、Sqlテーブル,,, –

+1

@ LaxminarayanCharanそれは、Esotericの質問に答えません: "どのようにデータが正しい順序ではないことを知っている"。 TransactionDateなどの元のデータにフィールドがあり、SQL ServerテーブルのIDENTITY値が存在し、その順序が1である場合は、他の順序で並べ替える場合と同じ結果ではないことがわかります。正しい? –

答えて

-1

sqlのorder by句を使用できます。もちろん、これはデータが既に1つの列でソートされていることを前提としています。 https://msdn.microsoft.com/en-us/library/ms188385.aspx?f=255&MSPPError=-2147217396

すべての挿入を完了した後、古いテーブルのソート済みバージョンである新しいテーブルを作成することができます。再び、同じ仮定。 How to sort values in columns and update table?

foreachループで1行ずつ挿入できます。また、毎回1行のDataRow []を作成する必要があります。 https://msdn.microsoft.com/en-us/library/ac44f8yy(v=vs.110).aspx

理想的な解決策は、order by節を使用するか、すべての挿入後にソートすることです。残念ながら、行を順番に挿入する方法を見つけることができませんでした。

クラス説明:

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy(v=vs.110).aspx
0

は、典型的に一括挿入操作のための保証順序はありません。個々の行を個別に(楽しくも効率的にも)挿入するのではなく、TableLockSqlBulkCopyOptionを試してみるとよいでしょう。

new SqlBulkCopy(strConnectionString, SqlBulkCopyOptions.TableLock); 

それだけtempdb最初に背景の並べ替えを介して行われます命じたインサートを、介して行うことができ、最小限のログを取る操作を試みます。

関連する問題