我想編寫一個方法來返回一個SQLiteDataReader對象,但沒有任何成功。在c中返回datareader#
這裏的方法的源代碼:
在一類文件(DBUtils.cs):
public static SQLiteDataReader getAction(string dbPath, byte actionLevel)
{
SQLiteConnection m_dbConnection;
SQLiteDataReader reader = null;
m_dbConnection = new SQLiteConnection("Data Source=" + dbPath + ";Version=3;FailIfMissing=True");
m_dbConnection.Open();
string sql = "SELECT * FROM Actions WHERE acLevel=" + actionLevel + " ORDER BY RANDOM() LIMIT 1";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
reader = command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
return reader;
}
在主窗口:
public MainWindow()
{
InitializeComponent();
const string dbPath = "../../TestDatabase.sqlite";
SQLiteDataReader zReader = DBUtils.getAction(dbPath, 1);
MessageBox.Show(Convert.ToString(zReader["acText"]));
}
現在,當我跑步步當我在getAction()方法中時,我確實看到數據已從數據庫中加載,但當它回到消息框時,我得到一個非法異常,因爲DataReader中沒有當前行。
任何人都有關於發生了什麼的線索?
感謝
讀者只是一個指向您的數據的指針。問題是SQLiteConnection超出了範圍。你可能想要返回一個項目列表,而不是讀者 –
@StuartSmith,但讀者有一個引用命令對象,它有一個連接的引用,所以它不能得到GCd,可以嗎? – stuartd