SQLite ExecuteReader适用于Console和Forms Apps,但不适用于Windows Service

时间:2013-09-16 07:39:32

标签: c# sqlite windows-services

我有一个SQLite数据访问提供程序库,它只通过单例类提供对SQLite数据库(.db)的非SQL编程访问。这个lib实际上使用SQLiteCommands来实现这种访问。问题是 SQLiteDataReader的SELECT查询的ExecuteReader适用于WinForms和Console Test-apps,但在Windows服务中使用时为null。 Service和Test-app都使用相同的lib。没有抛出异常。请看下面的示例代码:

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);
}

1 个答案:

答案 0 :(得分:0)

问题在于我写的TOIQDevice扩展方法,在SQLiteParameter中有一个小错误,一旦修复了规定的问题就消失了,现在我可以通过ExecuteReader看到数据了。