Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将数据集插入SQL数据库_C#_Mysql_Sql_Dataset - Fatal编程技术网

C#将数据集插入SQL数据库

C#将数据集插入SQL数据库,c#,mysql,sql,dataset,C#,Mysql,Sql,Dataset,我试图将数据集插入SQL数据库,但在将数据集作为参数传递给DB类时遇到困难。我不确定是否允许它作为一个论点通过。如果没有,我的选择是什么 我创建数据集的方式: public static void getLogs() { string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\someDir"; SQLiteConnection cn = new SQLiteC

我试图将数据集插入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);
}
我的数据库类和insert方法如下所示:

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 dtExcelData = new DataTable();
 //Fill dtExcelData and pass as parameter
 ParametersCollection param = new ParametersCollection();
 param.Add(CreateParameter("@DataImported", dtExcelData));
 ExecuteDataSet("spImportData", CommandType.StoredProcedure, param);

谢谢

您可以循环数据集中的数据表,并可以将数据表作为存储过程参数传递,
找到一个示例

1.-转到SQL Server,在数据库名称下转到“可编程性\类型\用户定义的表类型”,右键单击并创建一个新的:

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

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 dtExcelData = new DataTable();
 //Fill dtExcelData and pass as parameter
 ParametersCollection param = new ParametersCollection();
 param.Add(CreateParameter("@DataImported", dtExcelData));
 ExecuteDataSet("spImportData", CommandType.StoredProcedure, param);

您可以选择将
数据集
传递到
数据表
,然后从
数据表
传递到数据库。作为UDT传递对您来说很容易。.链接将帮助您