13#ifdef __TNBPROCESSHANDLE_H__
14 #ifndef _TnbPROCESS_PipeInOut_ENABLE
15 #error Please define _TnbPROCESS_PipeInOut_ENABLE first rather than you include TnbProcessHandle.h.
20 #define _TnbPROCESS_PipeInOut_ENABLE
27#pragma comment(lib, "odbccp32.lib")
60 static bool AddUserDsn(LPCTSTR lpszDriver, LPCTSTR lpszDsn, LPCTSTR lpszServer, LPCTSTR lpszPath)
65 dnt.
Add(_T(
"Trusted_Connection=Yes"));
91 static bool HasUserDsn(LPCTSTR lpszDriver, LPCTSTR lpszDsn)
108 BOOL r = ::SQLConfigDataSource(NULL, request, lpszDriver, attributes);
126 const WORD errorMsgMax = 300;
127 TCHAR errorMsg[errorMsgMax + 1];
128 if ( pErrorCodes != NULL )
134 RETCODE rc = ::SQLInstallerError(count++, &errorCode, errorMsg, errorMsgMax, NULL);
135 if ( rc == SQL_NO_DATA )
139 if ( rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO )
141 TRACE1(
"%s\n",
CStr(errorMsg));
143 if ( pErrorCodes != NULL )
145 pErrorCodes->Add(errorCode);
204 return _super::Connect(lpszManageName, _T(
""), _T(
""));
223 static bool AttachDataFile(LPCTSTR lpszManageName, LPCTSTR lpszMdfPath, LPCTSTR lpszDriver, LPCTSTR lpszServer = NULL)
225 CStr server = lpszServer;
228 server = _T(
".\\SQLEXPRESS");
237 cl.
Format(_T(
"sqlcmd -S %s -Q \"sp_attach_db '%s','%s','%s';\"")
240 bool r = ms_Execute(ss, cl);
245 s.
Format(_T(
"SQLツールが以下のメッセージを返しました。\n正常なら「はい」、失敗なら「いいえ」を選択してください。\n\n-----\n\n%s"),
CStr(ss));
246 if ( ::MessageBox(NULL, s, _T(
"AttachDataFile"), MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2) == IDNO )
254 cl2.
Format(_T(
"sqlcmd -S %s -Q \"drop database %s;\""), server, lpszManageName);
255 if ( ! ms_Execute(cl2) )
259 if ( ! ms_Execute(cl) )
276 static bool DetachDataFile(LPCTSTR lpszManageName, LPCTSTR lpszDriver, LPCTSTR lpszServer = NULL)
280 CStr server = lpszServer;
283 server = _T(
".\\SQLEXPRESS");
286 cl.
Format(_T(
"sqlcmd -S %s -Q \"sp_detach_db '%s';\""), server, lpszManageName);
287 return ms_Execute(cl) & r;
311 static bool BackupDataFile(LPCTSTR lpszBackupFileName, LPCTSTR lpszManageName, LPCTSTR lpszServer = NULL)
314 CStr server = lpszServer;
317 server = _T(
".\\SQLEXPRESS");
320 cl.
Format(_T(
"sqlcmd -S %s -Q \"backup database %s to disk ='%s' WITH INIT;\""), server, lpszManageName, lpszBackupFileName);
323 return r.
Find(
"正常に処理") != INVALID_INDEX;
334 static bool RestoreDataFile(LPCTSTR lpszBackupFileName, LPCTSTR lpszManageName, LPCTSTR lpszServer = NULL)
337 CStr server = lpszServer;
340 server = _T(
".\\SQLEXPRESS");
343 cl.
Format(_T(
"sqlcmd -S %s -Q \"restore database %s from disk ='%s' WITH RECOVERY;\""), server, lpszManageName, lpszBackupFileName);
346 return r.
Find(
"正常に処理") != INVALID_INDEX;
349 static bool ms_Execute(
CAscii& _res, LPCTSTR lpszCommandLine)
355 VERIFY( pipeIn.
Open() );
356 VERIFY( pipeOut.
Open() );
357 if ( ! ph.
Create(lpszCommandLine, &pipeIn, &pipeOut, NULL, FALSE) )
364 if ( pipeOut.
Receive(500, a) > 0 )
370 static bool ms_Execute(LPCTSTR lpszCommandLine)
373 if ( ! ms_Execute(r, lpszCommandLine))
380 TRACE1(
"%s\n",
CStr(r));
Double Null Terminate(DNT)型文字列操作関係のヘッダ
Double Null Terminate(DNT)型文字列管理
void Add(LPCTSTR lpszStr)
[設定] 追加.
CStr GetFullName(void) const
[取得] フルName名取得
CStr InsertAtEndOfName(LPCTSTR lpsz, LPCTSTR lpszExt=NULL) const
[取得] ファイル名末文字列追加.
static CStrVector GetLastErrors(CDwordVector *pErrorCodes=NULL)
[取得] ラストエラー文字列取得.
static bool HasUserDsn(LPCTSTR lpszDriver, LPCTSTR lpszDsn)
[確認] ユーザー DSN 確認
static bool RemoveUserDsn(LPCTSTR lpszDriver, LPCTSTR lpszDsn)
[削除] ユーザー DSN 削除.
static bool AddUserDsn(LPCTSTR lpszDriver, LPCTSTR lpszDsn, LPCTSTR lpszServer, LPCTSTR lpszPath)
[追加] ユーザー DSN 追加.
static bool ConfigDataSource(WORD request, LPCTSTR lpszDriver, const CDoubleNullTerminateStr &attributes)
[設定] データソース設定.
virtual bool Open(void)
[処理] オープン.
virtual size_t Receive(size_t size, LPVOID _P)
[処理] 受信.
bool Create(LPCTSTR lpszExecName, LPCTSTR lpszCommand, STARTUPINFO &si)
[実行] プロセス実行
DWORD WaitForExit(DWORD dwWait=INFINITE)
[処理] 終了待ち.
bool IsEmpty(void) const
[確認] 空チェック
static CStrT Fmt(const TCHAR *lpszFormat,...)
[作成] 書式付き文字列作成
INT_PTR Find(TYP t, INDEX iFromIndex=0) const
[確認] 検索.
void Format(const TYP *lpszFormat,...)
[代入] 書式付き文字列代入.
static bool BackupDataFile(LPCTSTR lpszBackupFileName, LPCTSTR lpszManageName, LPCTSTR lpszServer=NULL)
[設定] データファイルのバックアップ.
static bool RestoreDataFile(LPCTSTR lpszBackupFileName, LPCTSTR lpszManageName, LPCTSTR lpszServer=NULL)
[設定] データファイルのリストア.
static bool AttachDataFile(LPCTSTR lpszManageName, LPCTSTR lpszMdfPath, LPCTSTR lpszDriver, LPCTSTR lpszServer=NULL)
[設定] データファイルのアタッチ.
static bool IsDataFileAttached(LPCTSTR lpszManageName, LPCTSTR lpszDriver)
[確認] データファイルのアタッチ済み?.
bool ConnectDataFile(LPCTSTR lpszManageName=NULL)
[設定] 接続.
static bool DetachDataFile(LPCTSTR lpszManageName, LPCTSTR lpszDriver, LPCTSTR lpszServer=NULL)
[設定] データファイルのデタッチ.
virtual bool RemoveAll(void)
[削除] 空化
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
TNB::CStrT< TCHAR > CStr
文字列クラス