2011-11-12 15 views
1

私はいくつかのレコードを持つDataTableを持っています。C#/ ADO.NETのデータベースに複数の行を挿入するには?

私は、DataTableのを反復処理し、データベースに挿入するための次のコードを試してみたが、私はパラメータが宣言されていないというエラーメッセージが受信しています:

 using (SqlCommand command = new SqlCommand(("My insert statement"), connection)) 
        { 

         SqlParameter param1 = new SqlParameter(); 
         SqlParameter param2 = new SqlParameter(); 

         param1.ParameterName = "@ProductID"; 
         param2.ParameterName = "@ID"; 

         foreach (DataRow row in table.Rows) 
         { 
          param1.Value = row[0].ToString(); 
          param2.Value = row[1].ToString(); 

          command.ExecuteNonQuery(); 
         } 

        } 

任意のアイデア?ストアドプロシージャを提案しないでください - 私はこのメソッドまたはこれと同様の方法でこれを行いたいと思います。

+1

このコードでは、コマンドオブジェクトにパラメータを渡すことはありません。 – svanryckeghem

答えて

1

コマンドにパラメータを追加する必要があります。あなたはforeachの中で、あなたの最初のアドオンを入れた場合、あなたのコードを持っている方法を実行

しかし

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

注意は動作しますし、次はあなたが持っているというエラーメッセージで失敗しますすでに@ProductID/@IDという名前の変数。

毎回パラメータをクリアする必要があります。

See this for an example.

+0

ありがとう - これは私の問題だった:) –

1

チェックアウトSqlBulkCopyは、それはあなたがデータベースにあなたのDataTableまっすぐに渡すことができるようになります。 Link

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) 
{ 
    bulkCopy.DestinationTableName = "dbo.TableYouWantToInsertTheRowsTo"; 

    try 
    { 
     // Write from the source to the destination. 
     bulkCopy.WriteToServer(newProductsDataTable); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 
0

オブジェクト/データテーブルのリスト全体よりも、SQL2008を使用している場合は、ストアのプロシージャにパラメータとして渡すことができます。この場合、同じクラスをSQLでも宣言する必要があります。

関連する問題