Member 12349103 Ответов: 1

Ошибка Sqlite в базе данных


У меня есть Winform и база данных SQLite, я установил NuGet SQLite и ссылку на SQLite. Я получаю эту ошибку
An unhandled exception of type 'Finisar.SQLite.SQLiteException' occurred in SQLite.NET.dll

Additional information: no such table: VacTable


Я могу видеть базу данных, когда тестирую свой запрос в Редакторе запросов SQLite.

Это мое первое приложение 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;



namespace Vacation_Time_3._3
{
    public partial class Form1 : MaterialSkin.Controls.MaterialForm
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string sql = "Select * from VacTable";
            DataAccess.ExecuteSQL(sql);
            DataTable dt = DataAccess.GetDataTable(sql);
            gridControl1.DataSource = dt;

        }
    }
    }



Класс:

<pre>using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using Finisar.SQLite;
//using System.Data.SQLite;

namespace Vacation_Time_3._3
{
    //////SQLite Edition
    class DataAccess
    {

        // Connection String for  SQlite Edition
        static string _ConnectionString = @"Data Source=VacDB;Version=3;New=False;Compress=True";
        //Data Source=DemoT.db;Version=3;New=False;Compress=True;

        // Use for ..exe.config file 
        //   static string _ConnectionString = Sqtlie_project_tutorial.Properties.Settings.Default.SqliteDBtestConnectionString1;




        static SQLiteConnection _Connection = null;
        public static SQLiteConnection Connection
        {
            get
            {
                if (_Connection == null)
                {
                    _Connection = new SQLiteConnection(_ConnectionString);
                    _Connection.Open();

                    return _Connection;
                }
                else if (_Connection.State != System.Data.ConnectionState.Open)
                {
                    _Connection.Open();

                    return _Connection;
                }
                else
                {
                    return _Connection;
                }
            }
        }

        public static DataSet GetDataSet(string sql)
        {
            SQLiteCommand cmd = new SQLiteCommand(sql, Connection);
            SQLiteDataAdapter adp = new SQLiteDataAdapter(cmd);

            DataSet ds = new DataSet();
            adp.Fill(ds);
            Connection.Close();

            return ds;
        }

        public static DataTable GetDataTable(string sql)
        {
            Console.WriteLine(sql);
            DataSet ds = GetDataSet(sql);

            if (ds.Tables.Count > 0)
                return ds.Tables[0];
            return null;
        }

        public static int ExecuteSQL(string sql)
        {
            SQLiteCommand cmd = new SQLiteCommand(sql, Connection);
            return cmd.ExecuteNonQuery();
        }
    }

}


Изображение запроса
[IMG]http://i64.tinypic.com/1567er7.jpg[/IMG]


[^]

Что я уже пробовал:

Часы исследований, я могу видеть базу данных, когда я тестирую свой запрос в Редакторе запросов SQLite.

Afzaal Ahmad Zeeshan

Но ошибка говорит, что "Вактабельный" не найден. Можете ли вы проверить, к какой базе данных вы пытаетесь подключиться, и это та же самая база данных, которую вы используете в запросе?

Richard MacCutchan

Посмотрите еще раз на сообщение об ошибке. Он говорит вам, что база данных не содержит таблицы под названием "VacTable". Используйте командную строку sqlite3 shell для проверки базы данных.

1 Ответов

Рейтинг:
2

OriginalGriff

Проверьте путь к базе данных, так как вы не указываете его в строке подключения:

static string _ConnectionString = @"Data Source=VacDB;Version=3;New=False;Compress=True";
файл будет загружен из текущего каталога, который может не совпадать с ожидаемой папкой - помните, что проекты C# обычно имеют по крайней мере две двоичные папки: bin/debug и bin/release, так что вы можете прочитать не ту.

В любом случае, это плохая идея, чтобы сохранить ваши данные с исполняемым файлом: в производстве приложение будет установлено в разделе "Program Files", который читается только без доступа администратора в современных операционных системах, так что то, что работает в dev, может потерпеть неудачу в prod. Видеть здесь: Где я должен хранить свои данные?[^] - это показывает некоторые более безопасные места, чтобы держать его.