如何使用MFC ODBC API创建新数据库?
在连接字符串中,您应该提到要连接的数据库的名称。如果我刚刚安装了不包含用户数据库的SQL Server,该怎么办?
您在连接字符串中指定了哪个数据库名称?
E.g。对于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");
我应该使用系统数据库(例如主人,模型等)吗? 是否有更通用的方法?
答案 0 :(得分: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);