将解决方案文件夹移动到新计算机后,SQlite 异常无法连接到数据库
SQlite exception cannot connect to database after moving Solution folder to new computer
我对使用 C# 和 SQlite 进行编码还很陌生,这是我在 Stack Overflow 上的第一个 post,如有任何建议,我将不胜感激。
我创建了一个 Winforms 数据库应用程序来跟踪评估分数。当我从内部 Visual Studio 或调试文件夹中的 .exe 运行 时,一切都很好。
下面是我的 SQLite 连接代码示例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SQLite;
namespace Training_Assessment_Tracker
{
public partial class frmOperatorManagement : Form
{
SQLiteConnection myConnection = new SQLiteConnection("Data Source = C:\Users\matt_\OneDrive\Documents\C# Projects\Training Assessment Tracker\Training Assessment Tracker\Assessment Tracking.db");
public frmOperatorManagement()
{
InitializeComponent();
}
private void frmOperatorManagement_Load(object sender, EventArgs e)
{
ReadData();
ButtonState();
TextBoxState(false);
FillDeparmentComboBox();
FillEmployedBy();
FillEmployedStatus();
dtpDateLeft.CustomFormat = " ";
dtpDateLeft.Format = DateTimePickerFormat.Custom;
}
// Database Methods
public void ReadData()
{
myConnection.Open();
var datatable = new DataTable();
string commandText = "SELECT * FROM Operator";
SQLiteDataAdapter myDataAdapter = new SQLiteDataAdapter(commandText, myConnection);
myDataAdapter.Fill(datatable);
dgvOperators.DataSource = datatable;
myConnection.Close();
}
然后我将评估 Tracking.db 的路径更改为它在另一台计算机上的路径。解决方案已重建、保存和复制。整个解决方案文件夹已粘贴到第二台计算机的桌面上。
新路径请在下方:
public partial class frmOperatorManagement : Form
{
SQLiteConnection myConnection = new SQLiteConnection("Data Source = C:\Users\matthew.roberts\Desktop\Training Assessment Tracker\Training Assessment Tracker\Assessment Tracking.db");
public frmOperatorManagement()
{
InitializeComponent();
}
private void frmOperatorManagement_Load(object sender, EventArgs e)
{
ReadData();
ButtonState();
TextBoxState(false);
FillDeparmentComboBox();
FillEmployedBy();
FillEmployedStatus();
dtpDateLeft.CustomFormat = " ";
dtpDateLeft.Format = DateTimePickerFormat.Custom;
}
当 运行从第二台计算机上的调试文件夹中的 .exe 运行应用程序时,我收到 SQLite 异常 14:无法连接到数据库。奇怪的是异常文本中的文件路径名是开发机上数据库的文件路径
请参阅下面的异常文本(我块引用文件路径):
************** 异常文本 **************
code = CantOpen (14), message = System.Data.SQLite.SQLiteException (0x800007FF): unable to open
database file
at System.Data.SQLite.SQLite3.Open(String strFilename, String vfsName, SQLiteConnectionFlags
connectionFlags, SQLiteOpenFlagsEnum openFlags, Int32 maxPoolSize, Boolean usePool)
at System.Data.SQLite.SQLiteConnection.Open()
at Training_Assessment_Tracker.frmOperatorManagement.ReadData() in ***
> C:\Users\matt_\OneDrive\Documents\C# Projects\Training Assessment
> Tracker\Training Assessment Tracker\OperatorManagement.cs:line 37
***
at Training_Assessment_Tracker.frmOperatorManagement.frmOperatorManagement_Load(Object sender,
EventArgs e) in C:\Users\matt_\OneDrive\Documents\C# Projects\Training Assessment Tracker\Training
Assessment Tracker\OperatorManagement.cs:line 24
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.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.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr
lparam)
我错过了什么?
如有任何帮助,我们将不胜感激。
谢谢
马特
我已经设法解决了这个问题。
我一直在通过 windows 资源管理器而不是通过 visual studio 添加文件。
我现在已将评估 Tracking.db 包含在项目中并更改了它的属性:
- 构建操作:从“内容”到“None”
- 复制到输出目录:从“不复制”到“如果更新则复制”。
我清理了项目并重建了它。现在数据库复制到 Debug 文件夹并使用相对路径引用:
SQLiteConnection("Data Source = .\Assessment Tracking.db");
现在我可以连接到数据库并以各种形式查看数据网格视图中的数据。我已经通过复制到新计算机和网络服务器以及来自两个位置的 运行 应用程序来对此进行了测试。两次都有效。
@LV98 和@gunr2171,感谢您的帮助:)
我对使用 C# 和 SQlite 进行编码还很陌生,这是我在 Stack Overflow 上的第一个 post,如有任何建议,我将不胜感激。
我创建了一个 Winforms 数据库应用程序来跟踪评估分数。当我从内部 Visual Studio 或调试文件夹中的 .exe 运行 时,一切都很好。
下面是我的 SQLite 连接代码示例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SQLite;
namespace Training_Assessment_Tracker
{
public partial class frmOperatorManagement : Form
{
SQLiteConnection myConnection = new SQLiteConnection("Data Source = C:\Users\matt_\OneDrive\Documents\C# Projects\Training Assessment Tracker\Training Assessment Tracker\Assessment Tracking.db");
public frmOperatorManagement()
{
InitializeComponent();
}
private void frmOperatorManagement_Load(object sender, EventArgs e)
{
ReadData();
ButtonState();
TextBoxState(false);
FillDeparmentComboBox();
FillEmployedBy();
FillEmployedStatus();
dtpDateLeft.CustomFormat = " ";
dtpDateLeft.Format = DateTimePickerFormat.Custom;
}
// Database Methods
public void ReadData()
{
myConnection.Open();
var datatable = new DataTable();
string commandText = "SELECT * FROM Operator";
SQLiteDataAdapter myDataAdapter = new SQLiteDataAdapter(commandText, myConnection);
myDataAdapter.Fill(datatable);
dgvOperators.DataSource = datatable;
myConnection.Close();
}
然后我将评估 Tracking.db 的路径更改为它在另一台计算机上的路径。解决方案已重建、保存和复制。整个解决方案文件夹已粘贴到第二台计算机的桌面上。
新路径请在下方:
public partial class frmOperatorManagement : Form
{
SQLiteConnection myConnection = new SQLiteConnection("Data Source = C:\Users\matthew.roberts\Desktop\Training Assessment Tracker\Training Assessment Tracker\Assessment Tracking.db");
public frmOperatorManagement()
{
InitializeComponent();
}
private void frmOperatorManagement_Load(object sender, EventArgs e)
{
ReadData();
ButtonState();
TextBoxState(false);
FillDeparmentComboBox();
FillEmployedBy();
FillEmployedStatus();
dtpDateLeft.CustomFormat = " ";
dtpDateLeft.Format = DateTimePickerFormat.Custom;
}
当 运行从第二台计算机上的调试文件夹中的 .exe 运行应用程序时,我收到 SQLite 异常 14:无法连接到数据库。奇怪的是异常文本中的文件路径名是开发机上数据库的文件路径
请参阅下面的异常文本(我块引用文件路径):
************** 异常文本 **************
code = CantOpen (14), message = System.Data.SQLite.SQLiteException (0x800007FF): unable to open
database file
at System.Data.SQLite.SQLite3.Open(String strFilename, String vfsName, SQLiteConnectionFlags
connectionFlags, SQLiteOpenFlagsEnum openFlags, Int32 maxPoolSize, Boolean usePool)
at System.Data.SQLite.SQLiteConnection.Open()
at Training_Assessment_Tracker.frmOperatorManagement.ReadData() in ***
> C:\Users\matt_\OneDrive\Documents\C# Projects\Training Assessment
> Tracker\Training Assessment Tracker\OperatorManagement.cs:line 37
***
at Training_Assessment_Tracker.frmOperatorManagement.frmOperatorManagement_Load(Object sender,
EventArgs e) in C:\Users\matt_\OneDrive\Documents\C# Projects\Training Assessment Tracker\Training
Assessment Tracker\OperatorManagement.cs:line 24
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.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.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr
lparam)
我错过了什么?
如有任何帮助,我们将不胜感激。 谢谢
马特
我已经设法解决了这个问题。 我一直在通过 windows 资源管理器而不是通过 visual studio 添加文件。 我现在已将评估 Tracking.db 包含在项目中并更改了它的属性:
- 构建操作:从“内容”到“None”
- 复制到输出目录:从“不复制”到“如果更新则复制”。
我清理了项目并重建了它。现在数据库复制到 Debug 文件夹并使用相对路径引用:
SQLiteConnection("Data Source = .\Assessment Tracking.db");
现在我可以连接到数据库并以各种形式查看数据网格视图中的数据。我已经通过复制到新计算机和网络服务器以及来自两个位置的 运行 应用程序来对此进行了测试。两次都有效。
@LV98 和@gunr2171,感谢您的帮助:)