我有两个不同的c#项目。一个是主要的,另一个只是一个mite的类,我把它作为.dll文件并将其导入main。当我的脚本只是选择时,一切都很好。但是当我即将插入它时,我会给出错误并说“#34;数据库已锁定"”。我的SQLite类代码是这样的:
public class SQLite
{
public Finisar.SQLite.SQLiteConnection myConn;
public SQLiteCommand myComm;
public SQLiteDataReader myReader;
public SQLiteDataAdapter myAdapter;
public string SQLiteDatabaseName = "";
public void ExecuteQuery(string query)
{
myConn = new Finisar.SQLite.SQLiteConnection("Data Source=" + SQLiteDatabaseName + ".db;Version=3;");
myConn.Open();
myComm = myConn.CreateCommand();
myComm.CommandText = query;
myComm.ExecuteReader();
}
}
我之前搜索过这个代码:
using (SQLiteConnection c = new SQLiteConnection(ConnectionString))
{
c.Open();
using (SQLiteCommand cmd = new SQLiteCommand(sql, c))
{
using (SQLiteDataReader rdr = cmd.ExecuteReader())
{
...
}
}
}
我还没有尝试过,因为我不认为它会对我有用。因为我在我的Main类中有代码,我将myReader.Read()放在while语句中以读取所有行,如果我使用using语句,我不认为我可以这样做。
在我之前的项目中,当我使用MySQL时,一切都很好,但我只想让一个数据库项目就像SQLite这样的单个文件。下面是我使用MySQL时的代码:
class connectionToMySQL
{
string constring = "datasource=localhost;port=3306;username=root;password=root";
public MySqlConnection myConn;
public MySqlCommand myComm;
public MySqlDataReader myReader;
public void connectToMySQL(string query)
{
myConn = new MySqlConnection(constring);
myComm = new MySqlCommand(query, myConn);
try
{
myConn.Open();
myReader = myComm.ExecuteReader();
}
catch (Exception ex)
{
}
}
}
这对我来说真的很好。在我的主项目中没有单独的.Close()或.Dispose()行,因为我不认为我需要一个因为它永远不会给我关于数据库的错误被锁定。
请帮助我如何在SQLite中解决我的问题我应该怎么做才能锁定数据库"错误。但是解决方案不能限制我在while循环中执行读取数据。提前谢谢。