我正在使用带有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_SUCCESS
和SQL_SUCCESS_WITH_INFO
获得另一个回复,之后没有返回任何记录。 MSSQL仅支持这两个成功消息。
我如何理解/解决这个问题?
答案 0 :(得分:0)
好吧,花了一天后,我仍然找不到问题的原因。但对我来说,解决方案是每次关闭并打开数据库连接。