- PR -

[vb.net+access2000]SQLでAccessデータベースにテーブルをする際の注意事項?

1
投稿者投稿内容
hiro
会議室デビュー日: 2003/11/04
投稿数: 13
投稿日時: 2004-01-27 13:37
こんにちわ。またまたお世話になります。
只今、.net2002 +access2000を使用(後々Sqlサーバに乗変え)していますが、
SQLの「create table」でaccess2000上にテーブルを作成したいのですが、
下記コードだとテーブルが作成されないです。
しかも例外も発生しておらずどこに原因があるのかつかめない状態です。
どなたか、些細な情報でも良いのでご教授お願いします。
コード:
        '抜粋
class A
        '//
        Protected Overridable sub UsefullSQL() 

            '// Connectionオブジェクト
            Dim connection As IDbConnection = Nothing         
            '// Commandオブジェクト
            Dim Command As IDbCommand = Nothing             

            Try
                '// データベースに接続します。
                connection = dbFactory.CreateConn("接続文字列")
                connection.Open()

                '// データテーブル作成&インデックス作成SQL文を実行します。
                Command = dbFactory.CreateCommand( _
                "CREATE TABLE test01 (ID char (5))", connection)

            Catch exception As Exception

                Throw exception 
            Finally
                If ((connection Is Nothing = False) And _
                    (connection.State = ConnectionState.Open)) Then

                    connection.Close()
                End If
            End Try

        End Function
end class

class dbFactory
        ※dbFactoryクラスには
        Public Function CreateConn(ByVal connString _
                                       As String) As System.Data.IDbConnection

            Dim connection As IDbConnection = New OleDbConnection(connString)
            Return connection
        End Function

       Public Function CreateCommand(ByVal Strcommand As String, _
                 ByVal Iconn As System.Data.IDbConnection) As System.Data.IDbCommand

            Dim command As IDbCommand = New OleDbCommand(Strcommand, Iconn)
            Return command
        End Function
        を実装しています。
end class


例外も発生しないのですが、テーブルも作成されないのです。
どなたかご教授お願いいたします。
長くなりましたが、よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-27 13:55
引用:

hiroさんの書き込み (2004-01-27 13:37) より:

コード:
        '抜粋
class A
        '//
        Protected Overridable sub UsefullSQL() 

            '// Connectionオブジェクト
            Dim connection As IDbConnection = Nothing         
            '// Commandオブジェクト
            Dim Command As IDbCommand = Nothing             

            Try
                '// データベースに接続します。
                connection = dbFactory.CreateConn("接続文字列")
                connection.Open()

                '// データテーブル作成&インデックス作成SQL文を実行します。
                Command = dbFactory.CreateCommand( _
                "CREATE TABLE test01 (ID char (5))", connection)

            Catch exception As Exception

                Throw exception 
            Finally
                If ((connection Is Nothing = False) And _
                    (connection.State = ConnectionState.Open)) Then

                    connection.Close()
                End If
            End Try

        End Function
end class




 CreateCommandで、commandは作っていますが、Executeはしていませんよね?実行していないのだから、例外も発生しないし、テーブルもできません。

っつうか、C#とVB.NETが混ざっているような気がするのは私だけ?
hiro
会議室デビュー日: 2003/11/04
投稿数: 13
投稿日時: 2004-01-27 14:07
Jittaさん早速の回答ありがとうございます。
ご指摘のとおりでした。。単純なタイプミス、、はずかしい
このスレッドを消したいくらいです。。
きちんと何度も見直すべきですねえ。。

executeコマンドを発行したら正常に作成されました。
本当に有難うございました。
コード:
っつうか、C#とVB.NETが混ざっているような気がするのは私だけ? 


そうなんですか??  これでVB.NETで実行してるのですが、、
どこいらへんか指摘していただけると助かります^^;
#確かに.NETをやり始めはc#を使ってたんです。。
#気づかずに同じようなコードを書いていたのかも。。。

よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2004-01-27 14:48
引用:

コード:
                If ((connection Is Nothing = False) And _
                    (connection.State = ConnectionState.Open)) Then





本題とは関係ないですが、このIf文の記述では、
connectionがNothingのときにまずいですよ。
VBのAnd演算子はC#の&&演算子とは違って短絡評価ではなく、
And演算子で繋がれたすべての条件式を判定するので、connectionがNothingのとき、
「connecton.State」の個所で例外が発生します。

And演算子の代わりにAndAlso演算子を使えば、C#の&&の場合と同じです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-27 15:01
引用:

hiroさんの書き込み (2004-01-27 14:07) より:
コード:
っつうか、C#とVB.NETが混ざっているような気がするのは私だけ? 


そうなんですか??  これでVB.NETで実行してるのですが、、
どこいらへんか指摘していただけると助かります^^;


 気のせいでした、すみません。んと、「If (」とか「'//」を、勘違いしていました。失礼しました
1

スキルアップ/キャリアアップ(JOB@IT)