Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用SQLiteDataReader时发生异常_C#_.net_Sqlite_System.data.sqlite - Fatal编程技术网

C# 使用SQLiteDataReader时发生异常

C# 使用SQLiteDataReader时发生异常,c#,.net,sqlite,system.data.sqlite,C#,.net,Sqlite,System.data.sqlite,我正在做一个定制的SQLite包装。这意味着允许与数据库的现有连接。但是,我在两次调用此函数时收到一个异常 public Boolean DatabaseConnected(string databasePath) { bool exists = false; if (ConnectionOpen()) { this.Command.CommandText = string.Format(DATABASE_QUERY); using (re

我正在做一个定制的SQLite包装。这意味着允许与数据库的现有连接。但是,我在两次调用此函数时收到一个异常

public Boolean DatabaseConnected(string databasePath)
{
    bool exists = false;
    if (ConnectionOpen())
    {
        this.Command.CommandText = string.Format(DATABASE_QUERY);
        using (reader = this.Command.ExecuteReader())
        {
            while (reader.Read())
            {
                if (string.Compare(reader[FILE_NAME_COL_HEADER].ToString(), databasePath, true) == 0)
                {
                    exists = true;
                    break;
                }
            }
            reader.Close();
        }
    }
    return exists;
}
在执行命令或尝试打开数据库之前,我使用上述函数检查数据库当前是否打开。我第一次执行函数时,它执行时没有问题。在此之后,reader=this.Command.ExecuteReader将抛出一个异常

Object reference not set to an instance of an object.
StackTrace:
   at System.Data.SQLite.SQLiteStatement.Dispose()
   at System.Data.SQLite.SQLite3.Reset(SQLiteStatement stmt)
   at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt)
   at System.Data.SQLite.SQLiteDataReader.NextResult()
   at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
   at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.SQLite.SQLiteCommand.ExecuteReader()
   at EveTraderApi.Database.SQLDatabase.DatabaseConnected(String databasePath) in C:\Documents and Settings\galford13x\My Documents\Visual Studio 2008\Projects\EveTrader\EveTraderApi\Database\Database.cs:line 579
   at EveTraderApi.Database.SQLDatabase.OpenSQLiteDB(String filename) in C:\Documents and Settings\galford13x\My Documents\Visual Studio 2008\Projects\EveTrader\EveTraderApi\Database\Database.cs:line 119
   at EveTraderApiExample.Form1.CreateTableDataTypes() in C:\Documents and Settings\galford13x\My Documents\Visual Studio 2008\Projects\EveTrader\EveTraderApiExample\Form1.cs:line 89
   at EveTraderApiExample.Form1.Button1_ExecuteCommand(Object sender, EventArgs e) in C:\Documents and Settings\galford13x\My Documents\Visual Studio 2008\Projects\EveTrader\EveTraderApiExample\Form1.cs:line 35
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at EveTraderApiExample.Program.Main() in C:\Documents and Settings\galford13x\My Documents\Visual Studio 2008\Projects\EveTrader\EveTraderApiExample\Program.cs:line 18
   at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

您可以使用自定义包装来管理连接,但此包装不应管理命令:this.Command。由于命令对象存储在包装器中,因此它将被重用。问题是,第一次调用ExeuteReader时,此命令已被释放,第二次调用时,将出现异常。尝试为每个查询创建命令:

public bool DatabaseConnected(string databasePath)
{
    if (ConnectionOpen())
    {
        using (var command = YourSQLiteConnection.CreateCommand())
        {
            command.CommandText = string.Format(DATABASE_QUERY);
            using (reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    if (string.Compare(reader[FILE_NAME_COL_HEADER].ToString(), databasePath, true) == 0)
                    {
                        return true;
                    }
                }
            }
        }
    }
    return false;
}

您可以使用自定义包装来管理连接,但此包装不应管理命令:this.Command。由于命令对象存储在包装器中,因此它将被重用。问题是,第一次调用ExeuteReader时,此命令已被释放,第二次调用时,将出现异常。尝试为每个查询创建命令:

public bool DatabaseConnected(string databasePath)
{
    if (ConnectionOpen())
    {
        using (var command = YourSQLiteConnection.CreateCommand())
        {
            command.CommandText = string.Format(DATABASE_QUERY);
            using (reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    if (string.Compare(reader[FILE_NAME_COL_HEADER].ToString(), databasePath, true) == 0)
                    {
                        return true;
                    }
                }
            }
        }
    }
    return false;
}