2017-01-24 19 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"); 

Должен ли я использовать системные базы данных (например, мастер, модель и т. д.)? Есть ли еще более общий подход?

+1

вы можете заменить ???????? с «master» ... мастер db всегда существует – PrfctByDsgn

+0

master db всегда существует ... true для 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);