Создание базы данных через ODBC


Как создать новую базу данных с помощью API MFC ODBC?

В строке подключения следует указать имя базы данных, к которой вы хотите подключиться. Что делать, если я только что установил 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 4

1 ответ:

Можно опустить 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);