2011-06-18 20 views
1

また、私は表には、このデータテーブルを挿入するようにNull値を含むDataTableをSql Server Tableに挿入するにはどうすればよいですか?

ID    CustomerID   CompanyID 
-------  --------------  -------------- 
    1     2     Null 
    2     Null    1 
    3     5     4 

など、いくつかのNULL値を含むDataTableを持っています。 SQL Server 2005では、「JobDetails」という1つのテーブルに「JobOrderID」、「CustomerID」、「CompanyID」の3つの列があります。上記のDataTableを "JobDetails"テーブルに挿入すると、次のようになります。

JobOrderID  CustomerID   CompanyID 
    ------------ ------------  ------------ 
     1    2    Null 
     2    Null    1 
     3    5     4 

これを行うには?私はXMLとしてDataTableを渡そうとしました。しかし、NUll値の存在により、挿入しないエラーが発生します。

エラー手段、XMLタグはNULL値を考慮していない、それはNULLが含まれたタグを無視

<NewDataSet> 
     <JobDetails> 
      <JobOrderID>1</JobOrderID> 
      <CustomerID>2</CustomerID> 
     </JobDetails> 
     <JobDetails> 
      <JobOrderID>2</JobOrderID> 
      <CompanyID>1</CompanyID> 
     </JobDetails> 
     <JobDetails> 
      <JobOrderID>3</JobOrderID> 
      <CustomerID>5</CustomerID> 
      <CompanyID>4</CompanyID> 
     </JobDetails> 
    </NewDataSet> 

として、それがかかるようにします。挿入は行われません。

+0

スローされたエラーとは何ですか? –

+0

@Akram:私は自分の質問を編集しました。それを見てください。 – thevan

答えて

2

先テーブル名を設定するSqlBulkCopyを使用する通常は、アダプタ経由DataTableから挿入する(などSystem.Data.SqlClient.SqlDataAdapter)。これはnullsなどを処理します。また、非常に大きい場合はSqlBulkCopyを使用することもできます(この場合、バルク挿入が完全にログされない可能性があるため、トランザクションログなどに注意する必要がありますが、IIRC)。

注意:個人的には、私はDataTableここにを使用しています。 - 私は普通のタイプのクラスを使用しています。

1

DataTableを別のテーブルに取得する場合は、SqlBulkCopyクラスを使用します。 「NULL」とは対照的に、nullで自分の価値観がDBNull.Valueをに設定されていることを確認し、

 

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) 
{ 
    bulkCopy.DestinationTableName = destinationTableName; 
    bulkCopy.WriteToServer(yourDataTable); 
} 
 
1

私はあなたが元のためにそのデフォルト値でNULLを置き換えることができると思います。 companyIdフィールドのNULLを-1または0に置き換え、SQLサーバーで-1またはoをNULLに置き換えることができます。

IDの置換により、XMLの一部になります。 私はそれが良い解決策ではないことを知っています。

関連する問題