【问题标题】:C# Inserting a DataSet Into SQL DatabaseC# 将数据集插入 SQL 数据库
【发布时间】:2017-08-22 09:03:34
【问题描述】:

我正在尝试将数据集插入 SQL 数据库,但在将数据集作为参数传递给我的 DB 类时遇到了困难。我不确定是否允许它作为参数传递。如果没有,我的替代方案是什么?

我创建数据集的方式:

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();
    }
}

谢谢

【问题讨论】:

  • 您可以选择将dataset 传递给datatable,然后从datatable 传递给db。
  • 作为 UDT 传递,这对你来说很容易..This 链接会帮助你

标签: c# mysql sql dataset


【解决方案1】:

您可以遍历数据集中的数据表,并且可以将数据表作为存储过程参数传递, 找到了一个例子here

【讨论】:

    【解决方案2】:

    1.- 转到 SQL Server,在您的数据库名称下转到“programmability\Types\User-Defined Table Types,右键单击并创建一个新的:

    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,如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 2018-07-04
      • 1970-01-01
      相关资源
      最近更新 更多