using Npgsql; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ramitta { public partial class PostgreSqlDriver { private readonly string _connectionString; public PostgreSqlDriver(string connectionString) { _connectionString = connectionString; } // 执行查询操作,返回查询结果 public async Task>> ExecuteQueryAsync(string query, Dictionary parameters = null) { var result = new List>(); using (var conn = new NpgsqlConnection(_connectionString)) { try { await conn.OpenAsync(); Debug.WriteLine("Database connection established."); using (var cmd = new NpgsqlCommand(query, conn)) { if (parameters != null) { foreach (var param in parameters) { cmd.Parameters.AddWithValue(param.Key, param.Value ?? DBNull.Value); } } using (var reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { var row = new Dictionary(); for (int i = 0; i < reader.FieldCount; i++) { row[reader.GetName(i)] = await reader.IsDBNullAsync(i) ? null : reader.GetValue(i); } result.Add(row); } } } Debug.WriteLine($"Query executed: {query}"); } catch (Exception ex) { Debug.WriteLine($"Error executing query: {ex.Message}"); } } return result; } // 执行插入、更新、删除操作 public async Task ExecuteNonQueryAsync(string query, Dictionary parameters = null) { using (var conn = new NpgsqlConnection(_connectionString)) { try { await conn.OpenAsync(); Debug.WriteLine("Database connection established."); using (var cmd = new NpgsqlCommand(query, conn)) { if (parameters != null) { foreach (var param in parameters) { cmd.Parameters.AddWithValue(param.Key, param.Value ?? DBNull.Value); } } var rowsAffected = await cmd.ExecuteNonQueryAsync(); Debug.WriteLine($"Executed query: {query}, Rows affected: {rowsAffected}"); return rowsAffected; } } catch (Exception ex) { Debug.WriteLine($"Error executing non-query: {ex.Message}"); return -1; } } } // 执行插入操作,返回生成的主键 public async Task ExecuteInsertAsync(string query, Dictionary parameters = null, string returnColumn = "id") { using (var conn = new NpgsqlConnection(_connectionString)) { try { await conn.OpenAsync(); Debug.WriteLine("Database connection established."); using (var cmd = new NpgsqlCommand(query, conn)) { if (parameters != null) { foreach (var param in parameters) { cmd.Parameters.AddWithValue(param.Key, param.Value ?? DBNull.Value); } } cmd.CommandText += $" RETURNING {returnColumn};"; var result = await cmd.ExecuteScalarAsync(); Debug.WriteLine($"Executed insert, inserted ID: {result}"); return result != null ? Convert.ToInt32(result) : -1; } } catch (Exception ex) { Debug.WriteLine($"Error executing insert: {ex.Message}"); return -1; } } } // 执行事务操作 public async Task ExecuteTransactionAsync(List queries, List> parametersList) { using (var conn = new NpgsqlConnection(_connectionString)) { try { await conn.OpenAsync(); Debug.WriteLine("Database connection established."); using (var transaction = await conn.BeginTransactionAsync()) { for (int i = 0; i < queries.Count; i++) { using (var cmd = new NpgsqlCommand(queries[i], conn, (NpgsqlTransaction)transaction)) { var parameters = parametersList[i]; if (parameters != null) { foreach (var param in parameters) { cmd.Parameters.AddWithValue(param.Key, param.Value ?? DBNull.Value); } } await cmd.ExecuteNonQueryAsync(); } } await transaction.CommitAsync(); Debug.WriteLine("Transaction committed."); return true; } } catch (Exception ex) { Debug.WriteLine($"Error executing transaction: {ex.Message}"); return false; } } } } }