如何通过单次SQLite查询读取数据库配置?求实现示例
单次查询SQLite获取FTP配置的实现方案
实现步骤:
- 定义FTP配置实体类(推荐,用于统一管理配置字段)
public class FtpConfig { public string FtpHost { get; set; } public string FtpLogin { get; set; } public string FtpPassword { get; set; } public string FtpSerialPath { get; set; } }
- 新增单次查询方法(替换原多次调用的
ReadString,一次性读取所有所需字段)
public FtpConfig ReadFtpConfig(int id) { var config = new FtpConfig(); string sql = "SELECT ftpHost, ftpLogin, ftpPassword, ftpSerialPath FROM Ftp WHERE Id = @Id"; using (var cmd = new SQLiteCommand(sql, conn)) { // 参数化查询避免SQL注入,同时适配不同ID的查询需求 cmd.Parameters.AddWithValue("@Id", id); conn.Open(); using (var reader = cmd.ExecuteReader()) { if (reader.Read()) { // 处理字段可能为null的情况,避免空引用异常 config.FtpHost = reader.IsDBNull(reader.GetOrdinal("ftpHost")) ? "" : reader.GetString(reader.GetOrdinal("ftpHost")); config.FtpLogin = reader.IsDBNull(reader.GetOrdinal("ftpLogin")) ? "" : reader.GetString(reader.GetOrdinal("ftpLogin")); config.FtpPassword = reader.IsDBNull(reader.GetOrdinal("ftpPassword")) ? "" : reader.GetString(reader.GetOrdinal("ftpPassword")); config.FtpSerialPath = reader.IsDBNull(reader.GetOrdinal("ftpSerialPath")) ? "" : reader.GetString(reader.GetOrdinal("ftpSerialPath")); } } conn.Close(); } return config; }
- 调用新方法初始化FtpClient
var ftpConfig = DAL.ReadFtpConfig(1); FtpClient client = new FtpClient(ftpConfig.FtpHost, ftpConfig.FtpLogin, ftpConfig.FtpPassword); // 若需使用ftpSerialPath,直接从ftpConfig对象中获取即可 // string serialPath = ftpConfig.FtpSerialPath;
关键优化点:
- 使用参数化查询替代硬编码ID,消除SQL注入风险,提升代码可复用性
- 借助
SQLiteDataReader一次性读取整行数据,减少数据库连接与查询次数,提升性能 - 实体类的使用让配置字段更清晰,后续新增或修改字段时只需调整实体类和查询语句,维护成本更低
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

