Исключение коннектора драйвера .net C # jdbc - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь подключиться к базе данных HyperSQL (HSQLDB) на моей локальной машине из приложения ac # в visual studio.

Я выполнил шаги по созданию драйвера JDBC .net для сборки dll, а также загрузил приложение демо-консоли в разделе «загрузка» со следующего URL: http://nikolaiklimov.de/query-java-HyperSQL-database-with-csharp/

Демо приложение работает !!я могу подключиться к базе данных и запросить ее содержимое.Затем я преобразовал консольное приложение в библиотеку классов, затем вызвал библиотеку классов для запроса к БД, но это то место, где оно падает, и я получаю ошибки инициализации System.TypeInitializationException.любая идея, почему проект падает после преобразования в библиотеку классов.(если я преобразую библиотеку классов прямо обратно в консольное приложение, оно снова будет работать).

Код и строка подключения:

namespace HyperSQL
{
public static class sqlconnector
{
             readonly static string CONNECTION_STRING =   
  ConfigurationManager.ConnectionStrings["HyperSQL"].ConnectionString;
             const string SQL = "SELECT * FROM meeting";

    public static void getdata()
    {
        try
        {


        java.sql.DriverManager.registerDriver(new org.hsqldb.jdbcDriver());
        using (java.sql.Connection conn = java.sql.DriverManager.getConnection(CONNECTION_STRING))
        {
            java.sql.PreparedStatement ps = conn.prepareStatement(SQL);
            using (java.sql.ResultSet rs = ps.executeQuery())
            {
                while (rs.next())
                {
                    Console.WriteLine($"MEETING_NO={rs.getInt("MEETING_NO")}");

                    Console.WriteLine("------------------");
                }
            }
        }
        }
        catch (Exception ex)
        {

        }

        Console.ReadLine();
    }
}
}

jdbc:hsqldb:hsql://localhost:3458/elitedb;crypt_key=DADADADADAADDADAD;crypt_type=AES;shutdown=true;write_delay=false;user=****;password=****

Я добавил консольное приложение в свое решение после преобразованияв библиотеку классов.Код консольного приложения приведен ниже:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                HyperSQL.sqlconnector.getdata();
            }
            catch (Exception ex)
            {

            }
        }
    }
}

Вот ссылка для загрузки моего решения, созданного в visual studio.Он содержит консольное приложение, которое вызывает функцию в библиотеке классов.Сама библиотека классов (HyperSQL) просто конвертируется из консольного приложения и может быть преобразована обратно.Вам понадобится работающий экземпляр HyperSQL на вашем компьютере, чтобы успешно подключиться.http://eliteservicedev.azurewebsites.net/DemoHyperSQL.zip

1 Ответ

0 голосов
/ 25 февраля 2019

Вы видели ошибку, указанную на исходном сайте, который вы опубликовали?

Если вы забыли добавить зависимости времени выполнения в папку сборки вашего проекта, вы можете получить следующие ошибки: Не удалось загрузить файлили сборка 'IKVM.OpenJDK.Util, версия = 8.1.5717.0, культура = нейтральная, PublicKeyToken = 13235d27fcbfff58' или одна из ее зависимостей.Система не может найти указанный файл.TypeInitializationException: инициализатор типа для 'org.hsqldb.jdbc.JDBCDriver' вызвал исключение: FileNotFoundException: не удалось загрузить файл или сборку 'IKVM.Runtime, версия = 8.1.5717.0, культура = нейтральная, PublicKeyToken = 13235d27fcbfff58' или один из его значенийзависимостей.«Инициализатор типа для« sun.util.locale.provider.LocaleProviderAdapter »вызвал исключение.»FileNotFoundException: не удалось загрузить файл или сборку 'IKVM.OpenJDK.Text, версия = 8.1.5717.0, культура = нейтральная, PublicKeyToken = 13235d27fcbfff58' или одна из ее зависимостей.'Инициализатор типа для' org.hsqldb.HsqlDateTime 'вызвал исключение.'InvalidCastException: Невозможно привести объект типа 'java.util.PropertyResourceBundle' к типу sun.util.resources.OpenListResourceBundle '.

***** ОБНОВЛЕНИЕ В исходном проекте я вижу ошибкуГлядя в папку bin \ debug, я вижу, что не все указанные файлы копируются в папку bin ConsoleApp1.exe: это результат сравнения:

Confronto in corso dei file consoleapp1.txt e DEMOCSHARPTHYPERSQL.TXT
***** consoleapp1.txt
ConsoleApp1.exe
ConsoleApp1.exe.config
ConsoleApp1.pdb
hsqldb.dll
HyperSQL.dll
***** DEMOCSHARPTHYPERSQL.TXT
hsqldb.dll
HyperSQL.dll
*****

***** consoleapp1.txt
IKVM.OpenJDK.Jdbc.dll
IKVM.OpenJDK.Text.dll
***** DEMOCSHARPTHYPERSQL.TXT
IKVM.OpenJDK.Jdbc.dll
IKVM.OpenJDK.Localedata.dll --> Missing in ConsoleApp1.exe folder
IKVM.OpenJDK.Text.dll
*****

Если я вручную скопирую отсутствующую dll на ConsoleApp1.В папке exe программа работает правильно.Я думаю, что это визуальная ошибка студии

...