2017-03-29 13 views
0

SQLデータベースにデータセットを挿入しようとしていますが、DBセットの引数としてデータセットを渡すことができません。私は引数として渡すことが許可されているかどうかはわかりません。そうでない場合は、私の選択肢は何ですか?C#SQLデータベースにデータセットを挿入する

私は私のデータセットを作成する方法:

public static void getLogs() { 
    string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\someDir"; 
    SQLiteConnection cn = new SQLiteConnection("Data Source=" + path + ";Version=3;New=False;Compress=True;"); 
    cn.Open(); 
    SQLiteDataAdapter sd = new SQLiteDataAdapter("SELECT * FROM table", cn); 

    DataSet ds = new DataSet(); 
    sd.Fill(ds); 

    cn.Close(); 

    db.InsertLogs(Form1.adminID, Form1.deviceID, ds); 
} 

私のデータベースのクラスとメソッドを挿入しますが、以下のようになります。

public void InsertLogs(string user_id, string device_id, DataSet history) 
{ 
    string query = "INSERT INTO table (column1, column2, column3, column4, column5, column6, column7) VALUES (@value1, @value2, @value3, @value4, @value5, @value6, @value7);"; 

    if (OpenConnection() == true) 
    { 
     foreach (DataTable table in history.Tables) 
     { 
      foreach (DataRow row in table.Rows) 
      { 
       MySqlCommand cmd = new MySqlCommand(query, connection); 
       cmd.Parameters.AddWithValue("@value1", int.Parse(user_id)); 
       cmd.Parameters.AddWithValue("@value2", int.Parse(device_id)); 
       cmd.Parameters.AddWithValue("@value3", row[0]); 
       cmd.Parameters.AddWithValue("@value4", row[1]); 
       cmd.Parameters.AddWithValue("@value5", row[2]); 
       cmd.Parameters.AddWithValue("@value6", row[3]); 
       cmd.Parameters.AddWithValue("@value7", row[4]); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
     CloseConnection(); 
    } 
} 

あなたは、データセット内のDataTableをループすることができますあなたの

+1

'datatable'を' datatable'に渡し、 'datatable'をdbに渡すオプションがあります。 –

+0

UDTとして渡すと簡単になります。[こちら](https://www.aspsnippets.com/Articles/SqlBulkCopy--Bulk-Insert-records-and-Update-existing-rows-if-record-exists -using-C-and-VBNet.aspx)リンクはあなたを助けます –

答えて

0

ありがとうございましたストアドプロシージャのパラメータとしてデータテーブルを渡すことができます。 例を見つけましたhere

0

1.- SQL Serverに移動し、あなたのDBの名の下にタイプ\プログラマビリティ」に進んでください\ユーザー定義テーブル型、右の新しいものをクリックして作成します。

USE DBNAME 
GO 

-- Create the data type 
CREATE TYPE ValuesToInsert AS TABLE 
(
    Value1 INT NOT NULL, 
    Value2 INT NOT NULL, 
    Value3 VARCHAR(20) 
) 
GO 

2.-にSPを作成します。パラメータとしてテーブルを受け取り、パラメータは、ステップ1

USE [DBNAME] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- 
CREATE PROCEDURE [dbo].[spImportData] 
    @DataImported dbo.ValuesToInsert READONLY 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    INSERT INTO [dbo].[TableName] (Value1, Value2, Value3) 
    SELECT Value1, Value2, Value3 
    FROM @DataImported 

で作成した新しいユーザー定義テーブル型でなければなりません3.-、次のようDapper.netを使用して、この場合には、DBにあなたのコードからのDataTableを渡します

DataTable dtExcelData = new DataTable(); 
//Fill dtExcelData and pass as parameter 
ParametersCollection param = new ParametersCollection(); 
param.Add(CreateParameter("@DataImported", dtExcelData)); 
ExecuteDataSet("spImportData", CommandType.StoredProcedure, param); 
関連する問題