0

我做了一个项目来测试使用与 Gupta.Sql.Base.dll(版本 9.0.1.13768)的连接,我们使用版本 SQLBase901(即 SqlBase 文件夹)。我将 Gupta.Sql.Base.dll 添加为项目引用,但执行结束时无异常:

SQLBaseDataReader  reader = command.ExecuteReader(); //Error here that closes the App with no Exception

该应用程序简单地关闭,没有抛出异常。这是代码:

    private void button1_Click_1(object sender, EventArgs e)
    {
        string connectionString =  "data source=storage; uid=sysadm;ini=c:\\sqlbase901\\sql.ini";
        string queryString = "SELECT * FROM LAPOS_TRANSACCION";
        int paramValue = 145;

        using (SQLBaseConnection connection = new SQLBaseConnection(connectionString))
        {
            SQLBaseCommand command = new SQLBaseCommand(queryString, connection);
            command.Parameters.Add("@cod_farmacia", paramValue);
            try
            {
                connection.Open();
                SQLBaseDataReader reader = command.ExecuteReader(); //Error here that closes the App with no Exception
                while (reader.Read())
                {
                    Console.WriteLine("\t{0}\t{1}\t{2}",
                        reader[0], reader[1], reader[2]);
                }
                reader.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadLine();
        }

    }

报告显示文件 ntdll.dll 中出现错误

-------Error
Nombre de la aplicación con errores: PruebaConexionSqlBase.vshost.exe, versión: 14.0.23107.0, marca de tiempo: 0x559b788a
Nombre del módulo con errores: ntdll.dll, versión: 10.0.18362.1049, marca de tiempo: 0x37fd3042
Código de excepción: 0xc0000374
Desplazamiento de errores: 0x000dfa1d
Identificador del proceso con errores: 0x3bb8
Hora de inicio de la aplicación con errores: 0x01d68c2c8f4b0e27
Ruta de acceso de la aplicación con errores: C:\Prueba\PruebaConexionSqlBase\PruebaConexionSqlBase\bin\Debug\PruebaConexionSqlBase.vshost.exe
Ruta de acceso del módulo con errores: C:\Windows\SYSTEM32\ntdll.dll
Identificador del informe: 478cec12-bee4-4dfe-9465-f9cc2deea3d6
Nombre completo del paquete con errores: 
Identificador de aplicación relativa del paquete con errores: 

编辑:另一个使用不同代码的示例,相同的结果,在这种情况下,应用程序在执行行时关闭: Adapter.Fill(ds, "EMPLOYEE");

//' Setup the SQLBase connection string
SQLBaseConnection conn = new SQLBaseConnection();
conn.ConnectionString = "data source=storage; uid=sysadm;ini=c:\\sqlbase901\\sql.ini";

//' Open a connection to SQLBase
conn.Open();

SQLBaseDataAdapter Adapter = new SQLBaseDataAdapter();

SQLBaseCommand cmd = new SQLBaseCommand();
cmd.CommandText = "SELECT * FROM OPERACION_MENSAJE";
cmd.Connection = conn;

Adapter.SelectCommand = cmd;

// Create a new DataSet
DataSet ds = new DataSet();

Adapter.Fill(ds, "OPERACION");

// Close the database connection
conn.Close();

我想测试这种连接方法的原因是我在 OLEDB(我使用的当前连接方法)和 ODBC 的特定情况下遇到了问题:

ODBC:几个小时后,连接器使用了 PC 上的可用内存,它没有释放它。

OleDB:在某些情况下我们有并发问题,有这些问题的应用程序是用 Delphi 编写的,当它发生时重现问题有点困难,但在某些情况下,查询后表保持锁定,然后其他客户端计算机不能发送查询时获得答案。

在您看来,连接到 SqlBase 数据库的最佳(最可靠和最佳性能)方式是什么?

非常感谢!!

4

1 回答 1

0

你在问:

连接到 SqlBase 数据库的最佳(最可靠和最佳性能)方法是什么。

但是您指的是 SQLBase v9 - 这是古老的...... SQLBase 现在是v12.3 64bit,并且比 v9 领先几年。所以很难回答你的问题。如果您运行的是 v12.nn(或至少是 v11.7),那么毫无疑问 OLEDB 是最快、最简单和最可靠的连接方法。并发不是问题。忘记 ODBC - 它只是一个瓶颈。我们在 SQLBase v12 OLEDB 上有 300 个用户——没有问题。但是 v9 OLEDB 太老了——引用 'ntdll.dll' ,结合 Delphi ,把它归为 '祝你好运' 的类别。

我最好的建议是将您的数据库升级到一个现代的、适当支持的版本,然后再在 v9 OLEDB 上浪费太多时间。抱歉,我无法提供更多帮助 - 也许其他人有 v9 OLEDB 的经验。

于 2020-09-16T21:40:32.173 回答