サンプル集  >  VC  >  DLL作成E
SQLServerへ接続
2010/12/01

VC++ CLR で SQLServer へ接続します。

◆環境
OS Windows XP Professional Version 2002 Service Pack 3
VC Microsoft Visual C++ 2005 77972-235-2482122-41660

プロジェクトは「CLR コンソールアプリケーション」で作成しました。

SQLSvTest.cpp
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
// SQLSvTest.cpp : メイン プロジェクト ファイルです。

#include "stdafx.h"

using namespace System;
using namespace System::Data::SqlClient;

int main( array<System::String ^> ^args )
{
    Console::WriteLine( "SQLSvTest START" );

    SqlConnection^ con
    = gcnew SqlConnection( "Data Source=.\\SQLEXPRESS; " \
                           "AttachDbFilename=C:\\testDB.MDF; " \
                           "Integrated Security=True; " \
                           "User Instance=True"
                           );

    try
    {
        Console::WriteLine( "SqlConnection::Open" );
        con->Open();

        Console::WriteLine( "SqlConnection::Close" );
        con->Close();
    }
    catch ( InvalidOperationException^ ioe )
    {
        throw ioe;
    }
    catch ( SqlException^ se )
    {
        throw se;
    }

    Console::WriteLine( "SQLSvTest END" );
    return 0;
}

実行してみます。

SQLSvTest START
SqlConnection::Open
SqlConnection::Close
SQLSvTest END

正しく動作しました。

ちなみにMDFファイルが見つからないとこんなエラーが出ます。

SQLSvTest START
SqlConnection::Open

ハンドルされていない例外: System.Data.SqlClient.SqlException: ファイル 
C:\aaa.MDF の自動的に名前が付けられたデータベースをアタッチできません
でした。同じ名前のデータベースが既に存在するか、指定されたファイルを
開けないか、UNC 共有に配置されています。
   場所 main(String[] args) 場所 c:\sqlsvtest\sqlsvtest\sqlsvtest.cpp:
行 33
   場所 mainCRTStartupStrArray(String[] arguments) 場所 f:\sp\vctools\c
rt_bld\self_x86\crt\src\mcrtexe.cpp:行 324


2010/12/02追記

このプログラムを実行後、osqlで同じデータベースを使おうとしたらエラーが出ました。

>osql -Utest
パスワード:
1> use testDB
2> go
メッセージ 945、レベル 14、状態 2、サーバー localpc0004、行 1
ファイルにアクセスできなかったか、メモリまたはディスク領域が不足してい 
るので、データベース 'testDB' を開けません。詳細については、SQL Serve
r のエラー ログを参照してください。
メッセージ 602、レベル 21、状態 50、サーバー localpc0001、行 1
sysindexes 内に、データベース ID 5、オブジェクト ID 1、インデックス ID 
1 の行が見つかりませんでした。DBCC CHECKTABLE を sysindexes 上で実行
してください。
メッセージ 602、レベル 21、状態 50、サーバー localpc0001、行 1
Could not find row in sysindexes for database ID 5, object ID 1, index 
ID 1. Run DBCC CHECKTABLE on sysindexes.

何か後処理とかをし忘れてるのでしょうか?

▲ PageTop  ■ Home


Copyright (C) 2012 ymlib.com