C# 將數據表(DataTable)插入到 sqlite 表中
C# 將數據表(DataTable)插入到 sqlite 表中
資料來源: https://juejin.cn/s/c%23%20insert%20datatable%20into%20sqlite%20table
https://www.twblogs.net/a/5ef4b7ec26bc8c4a8eb40ff1
01.首先需要安裝System.Data.SQLite 程序包。
02.然後創建一個SQLite 連接,並打開連接。
03.創建一個SQL 命令,用於將數據插入到SQLite 表中。
04.將DataTable 中的數據循環讀取,並使用SqlCommand.ExecuteNonQuery() 方法執行插入命令。
code01:
using System; using System.Data; using System.Data.SQLite; namespace ConsoleApp { class Program { static void Main(string[] args) { // 创建 DataTable DataTable table = new DataTable(); table.Columns.Add("Id", typeof(int)); table.Columns.Add("Name", typeof(string)); // 添加数据 table.Rows.Add(1, "张三"); table.Rows.Add(2, "李四"); table.Rows.Add(3, "王五"); // 创建 SQLite 连接 using (SQLiteConnection connection = new SQLiteConnection("Data Source=test.db")) { connection.Open(); // 创建表 using (SQLiteCommand command = new SQLiteCommand("CREATE TABLE IF NOT EXISTS User (Id INTEGER PRIMARY KEY, Name TEXT)", connection)) { command.ExecuteNonQuery(); } // 插入数据 foreach (DataRow row in table.Rows) { using (SQLiteCommand command = new SQLiteCommand("INSERT INTO User (Id, Name) VALUES (@Id, @Name)", connection)) { command.Parameters.AddWithValue("@Id", row["Id"]); command.Parameters.AddWithValue("@Name", row["Name"]); command.ExecuteNonQuery(); } } } } } }
code02:
//建表 string createSql = $"CREATE TABLE {table}" + "(EPC varchar(32),UID varchar(20),q_time varchar(8),flag INTEGER," + " PRIMARY KEY(EPC, UID, q_time))"; SqlHelper.ExecuteNonQuery(createSql); //insert 語句 string commandText = $"INSERT INTO {table}(EPC,UID,q_time,flag)VALUES(@EPC,@UID,@q_time,@flag)"; SqlHelper.ExecuteMutliQuery(commandText, dt); ////調用方法 public int ExecuteMutliQuery(string commandText, DataTable dtData) { int res = 0; if (Conn.State == ConnectionState.Closed) Conn.Open(); using (SQLiteTransaction dbTrans = Conn.BeginTransaction()) { try { foreach (DataRow row in dtData.Rows) { res += ExecuteNonQuery(dbTrans, commandText, row.ItemArray); } dbTrans.Commit(); } catch (Exception ex) { res = -1; dbTrans.Rollback(); throw ex; } finally { //Conn.Close(); } } return res; } ///調用方法 public int ExecuteNonQuery(SQLiteTransaction transaction, string commandText, params object[] paramList) { if (transaction == null) throw new ArgumentNullException("transaction is null"); if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rolled back or committed,please provide an open transaction.", "transaction"); using (IDbCommand cmd = transaction.Connection.CreateCommand()) { cmd.CommandText = commandText; AttachParameters((SQLiteCommand)cmd, cmd.CommandText, paramList); if (transaction.Connection.State == ConnectionState.Closed) transaction.Connection.Open(); int result = cmd.ExecuteNonQuery(); return result; } }