C++;SQLExecDirect插入不';行不通 我编写了一个简单的SQL C++包装器类,在那里遇到了一个真正奇怪的问题。使用SQLExecDirect调用INSERT命令时,数据不会显示在SQL数据库(SQL Server 2012)中,尽管SQLRowCount返回一行。我试图写入的表名为“Person”,有四列(ID(AUTOINCREMENT)、Firstname(nvarchar(100))、Lastname(nvarchar(100))、生日(date))

C++;SQLExecDirect插入不';行不通 我编写了一个简单的SQL C++包装器类,在那里遇到了一个真正奇怪的问题。使用SQLExecDirect调用INSERT命令时,数据不会显示在SQL数据库(SQL Server 2012)中,尽管SQLRowCount返回一行。我试图写入的表名为“Person”,有四列(ID(AUTOINCREMENT)、Firstname(nvarchar(100))、Lastname(nvarchar(100))、生日(date)),c++,sql,sql-server,odbc,sql-insert,C++,Sql,Sql Server,Odbc,Sql Insert,这是我的密码: 类构造函数(EnvHandle、DBCHandle和StmtHandle是类成员) 查询成员函数 int SQLDatabase::ExecuteNonQuery(std::wstring Command) { SQLRETURN RetCode = -1; SQLINTEGER RowCount = 0; SQLAllocHandle(SQL_HANDLE_STMT, DBCHandle, &StmtHandle); RetC

这是我的密码:

类构造函数(EnvHandle、DBCHandle和StmtHandle是类成员)

查询成员函数

    int SQLDatabase::ExecuteNonQuery(std::wstring Command)
{
    SQLRETURN RetCode = -1;
    SQLINTEGER RowCount = 0;

    SQLAllocHandle(SQL_HANDLE_STMT, DBCHandle, &StmtHandle);

    RetCode = SQLExecDirect(StmtHandle, (SQLWCHAR*)Command.c_str(), Command.length());
    if (RetCode == SQL_SUCCESS || RetCode == SQL_SUCCESS_WITH_INFO)
    {
        SQLRowCount(StmtHandle, &RowCount);
        SQLFreeHandle(SQL_HANDLE_STMT, StmtHandle);
        return RowCount;
    }
    else
    {
        SQLFreeHandle(SQL_HANDLE_STMT, StmtHandle);
        return -1;
    }

}
main.cpp中的函数调用

        wcout << "Firstname:\n>";
    wcin >> Firstname;
    wcout << "Lastname:\n>";
    wcin >> Lastname;
    wcout << "Birthday:\n>";
    wcin >> Birthday;

    InsRows = database.ExecuteNonQuery(L"INSERT INTO Person (Firstname,Lastname,Birthday) VALUES ('" + Firstname + L"','" + Lastname + L"','" + Birthday + L"')");
    if (InsRows == -1)
        database.Error();
    else
        std::wcout << InsRows << " rows affected!" << std::endl;
wcout>Firstname;
wcout>Lastname;
wcout>生日;
InsRows=database.ExecuteNonQuery(L“插入到个人(名字、姓氏、生日)值中(“+Firstname+L”、“+Lastname+L”、“+birth+L”);
如果(InsRows==-1)
数据库错误();
其他的

std::wcout您使用的是
SQL\u AUTOCOMMIT\u OFF
,这意味着您的语句不会自动提交,因此您的新记录仅在事务中可见,永远不会在数据库中提交。尝试使用MS SQL Server的自动提交功能(将
SQL\u ATTR\u AUTOCOMMIT
设置为
SQL\u AUTOCOMMIT\u ON
,或者由于这是默认行为,所以不通知它),或者显式开始并提交事务


通常,每当执行更改表(无错误)的查询时,结果不显示,这意味着更改未提交

查看您的代码,您有:

SQLSetConnectAttr(DBCHandle, SQL_ATTR_AUTOCOMMIT, 
                  (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER);}

将“连接”属性设置为禁用“自动提交”。指定要启用自动提交,或者调用
SQLEndTran
提交更改。

您是否
提交了更改?非常感谢!多么简单的解决方案啊。现在很好用!
SQLSetConnectAttr(DBCHandle, SQL_ATTR_AUTOCOMMIT, 
                  (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER);}