2017-01-24 61 views
4

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

在连接字符串中,您应该提及要连接的数据库的名称。如果我刚刚安装了不包含用户数据库的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"); 

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

+1

可以更换????????与“主”...主数据库allways存在 – PrfctByDsgn

+0

master db allways exists ... SQL Server/MySQL的,但不适用于PostgreSQL –

+0

您的问题是具体询问有关SQL Server。如果您还需要其他数据库驱动程序的解决方案,则应明确列出这些要求。 – IInspectable

回答

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); 
相关问题