我正在尝试将数据集插入到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();
}
}
谢谢
答案 0 :(得分:0)
您可以遍历数据集中的数据表,并可以将数据表作为存储过程参数传递, 找到了一个例子here
答案 1 :(得分:0)
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,如下所示:
DataTable dtExcelData = new DataTable();
//Fill dtExcelData and pass as parameter
ParametersCollection param = new ParametersCollection();
param.Add(CreateParameter("@DataImported", dtExcelData));
ExecuteDataSet("spImportData", CommandType.StoredProcedure, param);