SQLite ExecuteReader 在控制台和窗体应用程序工作,但不能从 Windows 服务工作
本文关键字:但不能 Windows 服务工作 工作 应用程序 ExecuteReader 控制台 窗体 SQLite | 更新日期: 2023-09-27 18:31:22
我有一个SQLite数据访问提供程序库,它只是通过单例类提供对SQLite数据库(.db)的非SQL编程访问。这个库实际上使用 SQLiteCommand 来实现这种访问。问题是SQLiteDataReader的ExecuteReader用于SELECT查询,可以很好地与WinForms和Console Test-apps一起使用,但在Windows服务中使用时会给出null。服务和测试应用都使用相同的库。不会引发异常。请看下面的示例代码:
private SQLiteConnection slConn = null;
public void Initialize()
{
try
{
slConn = new SQLiteConnection(CreateIQDBConnString(Path.GetFileNameWithoutExtension(GetRegistry(PROJECT_PATH_REG))));
slConn.Open();
if (slConn.State == System.Data.ConnectionState.Open)
{
InitializeTables();
}
}
catch (Exception e)
{
throw e;
}
}
public List<IIQDevice> GetDevices()
{
try
{
List<IIQDevice> devices = new List<IIQDevice>();
using (SQLiteCommand r = GetGetDevicesCommand())
{
SQLiteDataReader dr = r.ExecuteReader();
while (dr.Read())
{
devices.Add(dr.ToIQDevice());
}
}
return devices;
}
catch (Exception e)
{
throw e;
}
}
private SQLiteCommand GetGetDevicesCommand()
{
return new SQLiteCommand("SELECT * FROM IQDEVICES;", slConn);
}
问题出在我编写的 TOIQDevice 扩展方法上,它曾经在 SQLiteParameter 中有一个小错误,一旦修复,所述问题就消失了,现在我可以通过 ExecuteReader 查看数据。