C# SQLite数据库未打开错误
我有一个构造函数,它从SQL Server数据库获取数据并将其放入本地SQLite数据库:C# SQLite数据库未打开错误,c#,sql,sqlite,C#,Sql,Sqlite,我有一个构造函数,它从SQL Server数据库获取数据并将其放入本地SQLite数据库: public ForemanController() { connectionString.DataSource = "dxdb02v"; connectionString.InitialCatalog = "QTRAX4619410"; connectionString.UserID = "tunnelld";
public ForemanController()
{
connectionString.DataSource = "dxdb02v";
connectionString.InitialCatalog = "QTRAX4619410";
connectionString.UserID = "tunnelld";
connectionString.Password = "david";
string queryString = "SELECT * FROM [QTRAXAdmin].[vwQT_Foreman]";
List<Foreman> list;
// Creates a SQL connection
using (var connection = new SqlConnection(connectionString.ToString()))
{
using (var command = new SqlCommand(queryString, connection))
{
connection.Open();
using (var reader = command.ExecuteReader())
{
list = new List<Foreman>();
while (reader.Read())
{
list.Add(new Foreman { ForeBadge = reader.GetString(0), ForeName = reader.GetString(1) });
}
}
}
connection.Close();
allForeman = list.ToArray();
}
string deleteSQL = "DELETE FROM Foreman;";
using (SQLiteConnection SQLconn1 = new SQLiteConnection(SQLiteConnectionString))
{
using (var command = new SQLiteCommand(deleteSQL, SQLconn1))
{
command.Connection.Open();
command.ExecuteNonQuery();
}
}
using (SQLiteConnection SQLconn2 = new SQLiteConnection(SQLiteConnectionString))
{
SQLiteCommand cmd2 = SQLconn2.CreateCommand();
foreach (Foreman row in allForeman)
{
cmd2.CommandText = "INSERT INTO Foreman (ForeBadge, ForeName) VALUES (@param1, @param2);";
cmd2.Parameters.Add(new SQLiteParameter("@param1", row.ForeBadge));
cmd2.Parameters.Add(new SQLiteParameter("@param2", row.ForeName));
cmd2.ExecuteNonQuery();
}
}
}
我得到了这个错误:
那是因为那是你唯一忘记打开连接的地方
SQLConn2.Open();
添加以下内容:
SQLconn2.Open()代码>您忘记打开连接
SQLConn2.Open();
很明显,你不像其他人那样打开它。您需要一个SQLconn2.Open()
或cmd2.Connection.Open()
where.missingSQLconn2.Open()代码>旁注-这在类构造函数中做得太多了。我会认真地重新考虑将其作为一个单独的方法(或一组方法)。构造函数应该是轻量级的,并且不应该抛出任何异常(因为它们更难调试)。这可能很明显,但是为什么我不需要为DELETE语句打开连接呢?您确实需要为DELETE语句打开连接:command.connection.open()代码>