.net C#jdbc驱动程序连接器异常

时间:2019-02-25 11:14:56

标签: c# .net jdbc hsqldb

我正在尝试从Visual Studio中的c#应用程序连接到本地计算机上的hyperSQL数据库(HSQLDB)。

我已经完成了创建.net JDBC驱动程序以构建dll的步骤,还通过以下网址从“下载”部分下载了演示控制台应用程序: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

2 个答案:

答案 0 :(得分:0)

您看到发布的原始网站中列出的错误了吗?

  

如果您忘记将运行时依赖项添加到您的build文件夹中   项目,则可能会出现以下错误:无法加载文件或   程序集'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,Version = 8.1.5717.0,Culture = neutral,   PublicKeyToken = 13235d27fcbfff58'或其依赖项之一。 '的   为“ org.hsqldb.HsqlDateTime”的类型初始化程序引发了异常。   InvalidCastException:无法转换类型的对象   键入“ java.util.PropertyResourceBundle”   “ sun.util.resources.OpenListResourceBundle”。

*****更新 在源项目中,我看到一个错误,在bin \ debug文件夹中查看,我看到不是所有引用的文件都复制到ConsoleApp1.exe bin文件夹中:这是比较结果:

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文件夹中,则程序将正确运行。我认为这是视觉工作室的错误

答案 1 :(得分:0)

似乎VS由于未解决所有IKVM DLL,因此未将其复制到输出文件夹。请参阅此SourceForge issue和此GitHub issue,以及后面的我的评论。