.NETのOdbcConnection クラスなどを利用し、データベースにODBC接続するサンプルコードになります。
SELECT, INSERT, UPDATE, DELETEを実行してみます。
postgres=# select version(); version -------------------------------------------------------------------------- PostgreSQL 12.1 on x86_64-pc-cygwin, compiled by gcc (GCC) 7.4.0, 64-bit (1 行)
ODBCドライバに対する、対象プラットフォームが適切でない場合は、以下の例外が発生ます。
ERROR [IM014] [Microsoft][ODBC Driver Manager] 指定された DSN には、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています
また、32bit版のODBCドライバしかない場合は、対象プラットフォーム(C#)、ターゲットCPU(VB)をx86にしてビルドすれば、この例外が発生しないと思います。
32bitを選ぶになっていませんか?
以下に C#, Visual Basic(VB) によるデータベース接続とデータベース操作のサンプルコードを記します。
ODBCドライバのインストール、ODBCデータソース設定は完了していることを前提とします。
以下のキャプチャでは、OdbcSampleDSNを設定しました。
サンプルコード内で CREATE TABLE, DROP TABLEも行っています。
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); } } } } }
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で取得した値が表示されます。
以上、.NETでODBC接続しデータベース操作を行うサンプルコードでした。