Marc-IT Ответов: 1

Формат файла SQLite unsported


Привет
У меня есть приложение winforms на C# witch, которое я завершил, но теперь я хочу уменьшить зависимости, такие как sqlserver express.
Что им пытаются сделать, это изменить мой код из SQL Server для базы данных SQLite.
Поэтому я погуглил его и последовал учебнику, я внес изменения, но у меня возникли некоторые проблемы, может ли кто-нибудь взглянуть на код и понять, в чем проблема?
Я получаю ошибку
An unhandled exception of type 'Finisar.SQLite.SQLiteException' occurred in SQLite.NET.dll
Additional information: unsupported file format

In the line sal_con.Open();

Эта форма предназначена для получения информации из базы данных под названием db.db (ведьма, которую я уже преобразовал из sql в формат sqlit) таблицы "temp" и печати ее в отчет crystal reports.

Если я смогу заставить эту форму работать, то другие формы будет легко перенести.
Заранее спасибо

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

СТАРЫЙ КОД:
    public partial class report : Form
    {
        public static SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\BD.mdf;Integrated Security=True;Connect Timeout=30");
        
public report()
        {
            InitializeComponent();
        }
        public void report_Load(object sender, EventArgs e)
        {
            con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "select * from temp";
            cmd.ExecuteNonQuery();
            bdDataSet ds = new bdDataSet();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(ds.temp);
            hytherm myReport = new hytherm();
            myReport.SetDataSource(ds);
            crystalReportViewer1.ReportSource = myReport;
            con.Close();

            con.Open();
            SqlCommand cmd2 = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "truncate table dbo.temp";
            cmd.ExecuteNonQuery();
            con.Close();
        }



НОВЫЙ КОДЕКС:
        private void SetConnection()
        {
            sql_con = new SQLiteConnection
                ("Data Source=db.db;Version=3");
        }

        private void ExecuteQuery(string txtQuery)
        {
            SetConnection();
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            sql_cmd.CommandText = txtQuery;
            sql_cmd.ExecuteNonQuery();
            sql_con.Close();
        }
        public void report_Load(object sender, EventArgs e)
        {
            SetConnection();
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            sql_cmd.CommandType = CommandType.Text;
            sql_cmd.CommandText = "select * from temp";



            SQLiteDataAdapter da = new SQLiteDataAdapter(sql_cmd);
            DB.Fill(DS);
            hytherm myReport = new hytherm();
            myReport.SetDataSource(DS);
            crystalReportViewer1.ReportSource = myReport;
            sql_con.Close();

            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            sql_cmd.CommandType = CommandType.Text;
            sql_cmd.CommandText = "DELETE FROM table temp";
            sql_cmd.ExecuteNonQuery();
            sql_con.Close();
        }
    }
}

1 Ответов

Рейтинг:
5

Midi_Mick

1. Почему вы делаете cmd.ExecuteNonQuery в команде select? Он выполняет команду, но ничего не делает с возвращаемыми данными.
2. SQLite не имеет команды TRUNCATE. Вместо усечения выполните команду "Удалить из" без предложения WHERE. SQLite был оптимизирован, чтобы рассматривать это как усечение.
3. SQLite не использует " dbo " для основной схемы. Если вы хотите включить имя схемы (которое является необязательным), используйте "main".


Marc-IT

Hy спасибо за советы, я обновил код.
Я все еще получаю ошибку thoug в строке sql_con.Открыть();
Ссылка на объект не была определена как экземпляр объекта.