将解决方案文件夹移动到新计算机后,SQlite 异常无法连接到数据库

如何解决将解决方案文件夹移动到新计算机后,SQlite 异常无法连接到数据库

我对使用 C# 和 sqlite 进行编码非常陌生,这是我在 Stack Overflow 上的第一篇文章,因此不胜感激。

我创建了一个 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();
        }

然后我将 Assessment 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 添加文件。 我现在已经在项目中包含了 Assessment Tracking.db 并更改了它的属性:

  • 构建操作:从“内容”到“无”
  • 复制到输出目录:从“不要复制”到“如果更新则复制”。

我清理了项目并重建了它。现在数据库复制到 Debug 文件夹并使用相对路径引用:

SQLiteConnection("Data Source = .\\Assessment Tracking.db");

现在我可以连接到数据库并以各种形式查看datagridviews中的数据。我已经通过复制到新计算机和联网服务器并从两个位置运行应用程序来测试了这一点。两次都有效。

@LV98 和@gunr2171,谢谢你的帮助:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?