.NETのOdbcConnection クラスなどを利用し、データベースにODBC接続するサンプルコードになります。
SELECT, INSERT, UPDATE を実行してみます。
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接続しデータベース操作を行うサンプルコードでした。