【SQLite】使用事务处理带参数的插入

using (SQLiteConnection conn = new SQLiteConnection(String.Format("Data Source={0};Pooling=true",fileName.ToString())))
            {
                using (SQLiteCommand cmd = new SQLiteCommand())
                {
                    conn.Open();
                    cmd.Connection = conn;
                    Stopwatch warch = new Stopwatch();
                    warch.Start();

                    SQLiteTransaction trans = conn.BeginTransaction();
                    cmd.Transaction = trans;
                    try
                    {
                        for (int i = 0; i < _dataTable.Rows.Count; i++)
                        {
                            cmd.CommandText =
                                "insert into HistoryData (PointId,PointType,TempValue,HumiValue,TTime) values (@PointId,@PointType,@TempValue,@HumiValue,@TTime)";
                            cmd.Parameters.Add(new SQLiteParameter("@PointId", DbType.Int32));
                            cmd.Parameters.Add(new SQLiteParameter("@PointType", DbType.String, 20));
                            cmd.Parameters.Add(new SQLiteParameter("@TempValue", DbType.Double));
                            cmd.Parameters.Add(new SQLiteParameter("@HumiValue", DbType.Double));
                            cmd.Parameters.Add(new SQLiteParameter("@TTime", DbType.DateTime));

                            cmd.Parameters[0].Value = _dataTable.Rows[i]["PointId"].ToString();
                            cmd.Parameters[1].Value = _dataTable.Rows[i]["PointType"].ToString();
                            cmd.Parameters[2].Value = _dataTable.Rows[i]["TempValue"].ToString();
                            cmd.Parameters[3].Value = _dataTable.Rows[i]["HumiValue"].ToString();
                            cmd.Parameters[4].Value = _dataTable.Rows[i]["TTime"];

                            cmd.ExecuteNonQuery();
                        }

                        trans.Commit();
                    }
                    catch (Exception)
                    {
                        trans.Rollback();
                        throw;
                    }

                    warch.Stop();
                    MessageBox.Show(string.Format("{0},{1}",_dataTable.Rows.Count,
                warch.Elapsed.ToString()));
                }
            }

使用事务处理插入sqlite数据库中的语句

SQLite是一个轻量级的关系型数据库管理系统,适合嵌入式应用。如果你想在SQLite中循环执行带有参数的插入语句,你可以使用`sqlite3_exec()`函数配合一个循环来完成。以下是一个简单的示例,展示了如何创建一个循环来插入一系列记录: ```cpp #include <sqlite3.h> #include <vector> #include <string> // 假设我们有一个数据结构或容器,存储要插入的数据 std::vector<std::pair<int, std::string>> data_to_insert = { {1, "Value1"}, {2, "Value2"}, // 更多数据... }; // SQLite3上下文 sqlite3* db; int rc; // 函数用于执行SQL(并处理结果) static int callback(void* data, int num_rows, char** row_data, char** col_names) { // 如果有错误,这里可以处理 if (num_rows != SQLITE_OK) { // 错误处理... return 0; } // ... return sqlite3_column_count(*row_data); } // 打开或连接到数据库(假设已经打开过了) rc = sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, 0, &db_error); // 插入数据的循环 for (const auto& entry : data_to_insert) { const char* insert_query = "INSERT INTO your_table (id, value) VALUES (?, ?)"; sqlite3_stmt* stmt; rc = sqlite3_prepare_v2(db, insert_query, -1, &stmt, NULL); if (rc == SQLITE_OK) { sqlite3_bind_int(stmt, 1, entry.first); sqlite3_bind_text(stmt, 2, entry.second.c_str(), entry.second.length(), SQLITE_TRANSIENT); rc = sqlite3_step(stmt); // 执行插入操作 if (rc != SQLITE_DONE) { // 处理错误... } sqlite3_finalize(stmt); // 关闭准备好的语句 } else { // 准备阶段错误处理... } } // 提交事务(如果所有插入都成功) if (rc == SQLITE_OK) { rc = sqlite3_exec(db, "COMMIT;", NULL, 0, &db_error); } else if (rc == SQLITE_BUSY) { // 如果因为并发导致忙,你可以选择重试、等待或回滚事务 // ... } // 最后记得关闭连接 sqlite3_close(db);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值