Results 1 to 4 of 4

Thread: C# Mono, SQLite в Win и Linux

  1. #1

    Default C# Mono, SQLite в Win и Linux

    Добрый вечер! Может быть на этом форуме данные вопросы не обсуждаются, но спрошу.
    Как сделать что бы приложение-бд работало и в windows и в linux(opensuse), c System.Data.SQLite не получается что-то: (в винде код работает, а вот в линукс при нажатии на кнопку зависает, а потом программа закрывается)

    using System;
    using System.Windows.Forms;
    using System.Data.SQLite;
    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {


    SQLiteConnection conn = new SQLiteConnection();
    MessageBox.Show(conn.State.ToString());
    conn.ConnectionString = "data source=|DataDirectory|\\SQLiteMono.sqlite3";
    conn.Open();
    MessageBox.Show(conn.State.ToString());
    conn.Close();
    MessageBox.Show(conn.State.ToString());
    }
    }
    }


    Может надо использовать Mono.Data.SQLite? Пытаюсь, но следующий код не работает в виндус: (код с сайта http://www.mono-project.com/SQLite)

    using System;
    using System.Data;
    using System.Windows.Forms;
    using Mono.Data.Sqlite;
    namespace MonoSqlite
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
    string connectionString = "Data Source=|DataDirectory|SQLiteMono.sqlite3, version=3";
    IDbConnection dbcon;
    dbcon = (IDbConnection)new SqliteConnection(connectionString);
    dbcon.Open();
    MessageBox.Show(dbcon.State.ToString());
    dbcon.Close();
    }
    }
    }

    Второй код работает в linux (opensuse), но в винде выдает ошибку - "System.TypeLoadException: Правила безопасности наследования нарушены типом: "Mono.Data.Sqlite.SqliteConnectionHandle". Производные типы должны либо соответствовать по доступности в контексте безопасности базовому типу, либо быть менее доступными."

    Вообщем, реально ли сделать что бы один код работал и в винде и в линукс?

  2. #2
    Join Date
    Mar 2011
    Location
    Ukraine, Dnipropetrovsk
    Posts
    672

    Default Re: C# Mono, SQLite в Win и Linux

    Пока не очень разбираюсь в шарпе, но смею предположить что портирование редко гладко проходит, на плюсах тоже системные функции и объекты могут отличатся между win и lin(хотя тут наверное mono создает среду выполнения а не ОС). Редкий код будет работать везде одинаково. Может если компилятор может из одной системы компилить под другую то он конвертирует системные ображения, хотя я в этом оч сомневаюсь. Вообще лучше обращаться на форум программистов.

  3. #3

    Post Re: C# Mono, SQLite в Win и Linux

    Вообщем, похоже проблема в самой библиотеке *.dll, я использовал готовые System.Data.SQLite для вин, и Mono.Data.SQLite для линукс, соответственно они не хотят работать не со своей платформой... надо перекомпилировать System.Data.SQLite самому и должно все работать... буду разбираться...

    А пока что, нашел "плохой способ" запуска одного приложения на разных платформой в данном случае - подключить обе библиотеки и в зависимости от платформы использовать подходящую библиотеку:

    OperatingSystem os = Environment.OSVersion;
    switch (os.Platform)
    {
    case PlatformID.Unix:
    //код
    break;
    case PlatformID.Win32NT:
    //код
    break;
    }
    Этот метод работает, но он так сказать "не правильный".

  4. #4
    Join Date
    Mar 2011
    Location
    Ukraine, Dnipropetrovsk
    Posts
    672

    Default Re: C# Mono, SQLite в Win и Linux

    Тут нужно обращатся на форум SQLite или C#, ну или как минимум на программистский. Возможно кроссплатформенность в этом случае делается именно так.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •