ceODBC DatabaseError:没有可用的诊断消息文本

时间:2016-02-04 15:25:06

标签: python sql-server odbc

我正在使用带有ceodBC的Mssql,我尝试了pyodbc,但是执行很多方法很慢,我想尝试ceODBC。

我按如下方式创建了一个连接:

eODBC.connect('DRIVER={SQL Server Native Client 11.0};SERVER=%s;port=%s;DATABASE=%s;UID=%s;PWD=%s'

当我尝试在此伪代码方案中插入一行时://在sql server上执行查询,并且使用pyodbc时没有任何问题。

UPDATE TABLE
SET VALUES
 ID = 2
 InsertionDateTime = '04/2/2016 12:49:50'
if @@rowcount==0
THEN INSERT VALUES(  ID = 2
 InsertionDateTime = '04/2/2016 12:49:50')

我收到以下错误:

ceODBC.DatabaseError: no diagnostic message text available

我不知道错误和没有信息,只有信息在ceODBC mailing list没有任何解决方案。

然后我查看了ceODBC的源代码,这里是相关的代码片段:

if (rcToCheck == SQL_SUCCESS || rcToCheck == SQL_SUCCESS_WITH_INFO)
        return 0;
    if (rcToCheck == SQL_INVALID_HANDLE) {
        PyErr_SetString(g_DatabaseErrorException, "Invalid handle!");
        return -1;
    }

    // create new error object
    error = PyObject_NEW(udt_Error, &g_ErrorType);
    if (!error)
        return -1;
    error->context = context;

    // determine number of diagnostic records available
    rc = SQLGetDiagField(obj->handleType, obj->handle, 0, SQL_DIAG_NUMBER,
            &numRecords, SQL_IS_INTEGER, NULL);
    if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
        error->message = ceString_FromAscii("cannot get number of " \
                "diagnostic records");

    // determine error text
    } else if (numRecords == 0) {
        error->message = ceString_FromAscii("no diagnostic message text " \
                "available"); 

据我所知,cdODBC从SQL_SUCCESSSQL_SUCCESS_WITH_INFO获得另一个回复,之后没有返回任何记录。 MSSQL仅支持这两个成功消息。

我如何理解/解决这个问题?

1 个答案:

答案 0 :(得分:0)

好吧,花了一天后,我仍然找不到问题的原因。但对我来说,解决方案是每次关闭并打开数据库连接。