通过ODBC创建数据库

4

如何使用MFC ODBC API创建新的数据库?

在连接字符串中,您应该提及要连接的数据库的名称。如果我刚安装的SQL Server中没有用户数据库怎么办?

在连接字符串中指定哪个数据库名称?

例如,对于SQL Server:

    CDatabase db;

    db.OpenEx(L"Driver={ODBC Driver 11 for SQL Server};Server=myServerAddress;"
              L"Database=????????;Uid=myUsername;Pwd=myPassword", CDatabase::noOdbcDialog);

    db.ExecuteSQL(L"CREATE DATABASE testdb");

我应该使用系统数据库(例如 master、model 等)吗?是否有更通用的方法?


1
您可以将“????????”替换为“主”... 主数据库始终存在。 - PrfctByDsgn
主数据库始终存在...这对于SQL Server / MySQL是正确的,但对于PostgreSQL不起作用。 - Max Lopatin
你的问题特别涉及到SQL Server。如果你需要其他数据库驱动程序的解决方案,你应该明确列出这些要求。 - IInspectable
1个回答

3
你可以在连接字符串中省略 Database=。然后你创建一个新的数据库,之后使用 USE 切换到该数据库。
像这样的内容对我来说很好:
SQLWCHAR     strConnect[256] = L"Driver={SQL Server};Server=.\\MACHINE;Trusted_Connection=yes;";
SQLWCHAR     strConnectOut[1024] = { 0 };
SQLSMALLINT nNumOut = 0;
SQLRETURN nResult = SQLDriverConnect(handleDBC, NULL, (SQLWCHAR*)strConnect, SQL_NTS, (SQLWCHAR*)strConnectOut, sizeof(strConnectOut), &nNumOut, SQL_DRIVER_NOPROMPT);
if (!SQL_SUCCEEDED(nResult))
    // some error handling

SQLHSTMT    handleStatement = SQL_NULL_HSTMT;
nResult = SQLAllocHandle(SQL_HANDLE_STMT, handleDBC, (SQLHANDLE*)&handleStatement);
if (!SQL_SUCCEEDED(nResult))
    // some error handling

// Create a new database and use that
nResult = SQLExecDirect(handleStatement, L"CREATE DATABASE Foobar", SQL_NTS);
nResult = SQLExecDirect(handleStatement, L"USE Foobar", SQL_NTS);

// create table Wallet in database Foobar
nResult = SQLExecDirect(handleStatement, L"CREATE TABLE Wallet (WalletID int NOT NULL,  Name nvarchar(5) NOT NULL)", SQL_NTS);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接