2017-01-24 27 views
4

MFC ODBC APIを使用して新しいデータベースを作成するにはどうすればよいですか?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"); 

システムデータベース(マスター、モデルなど)を使用する必要がありますか? さらに一般的なアプローチがありますか?

+1

あなたは置き換えることができ???????? "マスタ"とは...マスタdbは常に存在します – PrfctByDsgn

+0

マスタdbは常に存在します... SQL Server/MySQLの場合はtrueですが、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); 
関連する問題