このエントリーをはてなブックマークに追加


.NETでODBCを使用してデータベースに接続しSQLを実行するサンプル

.NETのOdbcConnection クラスなどを利用し、データベースにODBC接続するサンプルコードになります。
SELECT, INSERT, UPDATE を実行してみます。

参考サイト

関連記事

使用したデータベースとODBCドライバ

  • PostgreSQL
    postgres=# select version();
                                     version
    --------------------------------------------------------------------------
     PostgreSQL 12.1 on x86_64-pc-cygwin, compiled by gcc (GCC) 7.4.0, 64-bit
    (1 行)
  • PostgreSQL ODBC driver
    psqlODBC - https://odbc.postgresql.org/
  • 使用したpsqlODBC
    psqlodbc_12_01_0000-x64.zip

動作確認環境

ビルド(C#),コンパイル(VB)時の注意

ODBCドライバに対する、対象プラットフォームが適切でない場合は、以下の例外が発生ます。
ERROR [IM014] [Microsoft][ODBC Driver Manager] 指定された DSN には、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています
また、32bit版のODBCドライバしかない場合は、対象プラットフォーム(C#)、ターゲットCPU(VB)をx86にしてビルドすれば、この例外が発生しないと思います。
32bitを選ぶになっていませんか?

C#

02.png

Visual Basic(VB)

03.png

ODBC接続をしてSELECT, INSERT, UPDATE をするサンプルコード

以下に C#, Visual Basic(VB) によるデータベース接続とデータベース操作のサンプルコードを記します。
ODBCドライバのインストール、ODBCデータソース設定は完了していることを前提とします。
以下のキャプチャでは、OdbcSampleDSNを設定しました。

01.png
 

サンプルコード内で CREATE TABLE, DROP TABLEも行っています。

C# ODBCサンプルコード

using System;
using System.Data;
using System.Data.Odbc;

namespace OdbcSampleCS
{
    class Program
    {
        static void Main(string[] args)
        {
            string DSN = @"OdbcSampleDSN";
            string createTable = @"create table t1 (c1 int, c2 varchar(100))";
            string dropTable = @"drop table t1";
            string selectSQL = @"select * from t1";
            string insertSQL = @"insert into t1 values(?,?)";
            string updateSQL = @"update t1 set c2 = ? where c1 = ?";

            OdbcConnectionStringBuilder odbcConBuilder = new OdbcConnectionStringBuilder();
            odbcConBuilder.Dsn = DSN;

            using (OdbcConnection odbcCon = new OdbcConnection(odbcConBuilder.ToString()))
            {
                OdbcCommand cmd = new OdbcCommand();
                cmd.Connection = odbcCon;

                try
                {
                    odbcCon.Open();

                    OdbcParameter param1 = new OdbcParameter();
                    OdbcParameter param2 = new OdbcParameter();

                    // CREATE TABLE
                    cmd.CommandText = createTable;
                    cmd.ExecuteNonQuery();

                    // INSERT
                    cmd.CommandText = insertSQL;
                    param1.DbType = DbType.Int32;
                    param1.Value = 10;
                    cmd.Parameters.Add(param1);
                    param2.DbType = DbType.String;
                    param2.Value = "Windows10";
                    cmd.Parameters.Add(param2);
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();

                    // SELECT
                    cmd.CommandText = selectSQL;
                    using (OdbcDataReader odr = cmd.ExecuteReader())
                    {
                        while (odr.Read())
                        {
                            Console.WriteLine("{0},{1}", odr["c1"], odr["c2"]);
                        }
                    }

                    // UPDATE
                    cmd.CommandText = updateSQL;
                    param1.DbType = DbType.String;
                    param1.Value = "ウインドウズ10";
                    cmd.Parameters.Add(param1);
                    param2.DbType = DbType.Int32;
                    param2.Value = 10;
                    cmd.Parameters.Add(param2);
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();

                    // SELECT
                    cmd.CommandText = selectSQL;
                    using (OdbcDataReader odr = cmd.ExecuteReader())
                    {
                        while (odr.Read())
                        {
                            Console.WriteLine("{0},{1}", odr["c1"], odr["c2"]);
                        }
                    }

                    // DROP TABLE
                    cmd.CommandText = dropTable;
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
}

Visual Basic(VB) ODBCサンプルコード

Imports System
Imports System.Data
Imports System.Data.Odbc

Module Module1

    Sub Main()
        Dim DSN As String = "OdbcSampleDSN"
        Dim createTable As String = "create table t1 (c1 int, c2 varchar(100))"
        Dim dropTable As String = "drop table t1"
        Dim selectSQL As String = "select * from t1"
        Dim insertSQL As String = "insert into t1 values(?,?)"
        Dim updateSQL As String = "update t1 set c2 = ? where c1 = ?"

        Dim odbcConBuilder As OdbcConnectionStringBuilder = New OdbcConnectionStringBuilder()
        odbcConBuilder.Dsn = DSN

        Using odbcCon As OdbcConnection = New OdbcConnection(odbcConBuilder.ToString())
            Dim cmd As OdbcCommand = New OdbcCommand With {
                .Connection = odbcCon
            }

            Try
                odbcCon.Open()
                Dim param1 As OdbcParameter = New OdbcParameter()
                Dim param2 As OdbcParameter = New OdbcParameter()

                'CREATE TABLE
                cmd.CommandText = createTable
                cmd.ExecuteNonQuery()
                'INSERT
                cmd.CommandText = insertSQL
                param1.DbType = DbType.Int32
                param1.Value = 10
                cmd.Parameters.Add(param1)
                param2.DbType = DbType.String
                param2.Value = "Windows10"
                cmd.Parameters.Add(param2)
                cmd.ExecuteNonQuery()
                cmd.Parameters.Clear()
                'SELECT
                cmd.CommandText = selectSQL
                Using odr As OdbcDataReader = cmd.ExecuteReader()
                    While odr.Read()
                        Console.WriteLine("{0},{1}", odr("c1"), odr("c2"))
                    End While
                End Using
                'UPDATE
                cmd.CommandText = updateSQL
                param1.DbType = DbType.String
                param1.Value = "ウインドウズ10"
                cmd.Parameters.Add(param1)
                param2.DbType = DbType.Int32
                param2.Value = 10
                cmd.Parameters.Add(param2)
                cmd.ExecuteNonQuery()
                cmd.Parameters.Clear()
                'SELECT
                cmd.CommandText = selectSQL
                Using odr As OdbcDataReader = cmd.ExecuteReader()
                    While odr.Read()
                        Console.WriteLine("{0},{1}", odr("c1"), odr("c2"))
                    End While
                End Using
                'DROP TABLE
                cmd.CommandText = dropTable
                cmd.ExecuteNonQuery()
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
        End Using
    End Sub

End Module

実行結果

上記サンプルコードを実行したときの出力になります。
INSERT後のSELECTとUPDATE後のSELECTで取得した値が表示されます。

04.png

以上、.NETでODBC接続しデータベース操作を行うサンプルコードでした。



添付ファイル: file04.png 21件 [詳細] file03.png 14件 [詳細] file02.png 19件 [詳細] file01.png 22件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-01-18 (土) 17:43:48