在Qt中使用QxOrm对SQL Server数据进行连接,首先创建数据库S,然后在数据库中创建表User,然后在ODBC中设置改数据库S命名数据源为Sorm。
问题:SQL Server语法中,对表进行操作时表名需要写[S].[dbo].[User],这里表名就会出问题。
qxorm连接配置:
qx::QxSqlDatabase::getSingleton()->setDriverName("QODBC");
qx::QxSqlDatabase::getSingleton()->setDatabaseName("Sorm");
qx::QxSqlDatabase::getSingleton()->setHostName("localhost");
qx::QxSqlDatabase::getSingleton()->setUserName("sa");
qx::QxSqlDatabase::getSingleton()->setPassword("123456");
qx::QxSqlDatabase::getSingleton()->setFormatSqlQueryBeforeLogging(true);
qx::QxSqlDatabase::getSingleton()->setDisplayTimerDetails(true);
qx::QxSqlDatabase::getSingleton()->setVerifyOffsetRelation(true);
而在Qt中配置好QxOrm后,对表进行查询,其部分代码如下:
QSqlError daoError = qx::dao::create_table<User>();
List_user list_user;
// ******************** 这里使用的表名就是 [S].[dbo].[User] ********************
qx_query storedProc("select * from [S].[dbo].[User]");
daoError = qx::dao::execute_query(storedProc, list_user);
List_user::iterator it = list_user.begin();
qDebug() << "------------------------------------";
while(it != list_user.end()){
qDebug() << "ID:" << it.i->t().second->ID;
qDebug() << "UserName:" << it.i->t().second->UserName;
qDebug() << "PassWord:" << it.i->t().second->PassWord;
}
qDebug() << "------------------------------------";
然后结果如下图所示:
可以发现能够显示出结果,说明正常连接了。
而当执行插入操作时,其代码如下:
//user入库
QSqlDatabase db = qx::QxSqlDatabase::getDatabase();
bool bCommit = db.transaction();
// 插入语句
daoError = qx::dao::insert(user, &db);
bCommit = (bCommit && !daoError.isValid());
qAssert(bCommit);
db.commit();
就会出现如下错误:
如图红框所示,预定义语句中的表名是只有User,查找网上资料,上面这段代码的插入语句进行修改:
// 插入语句修改,手动添加一个表名的参数说明
qx::dao::insert(user, &db, "[S].[dbo].[User]");
再次执行仍然是有同样的问题,请问对于SQL Server这个表名如何处理?