#author("2020-01-18T17:43:48+09:00","","")
#author("2020-05-09T23:17:16+09:00","","")
#navi(../)
* .NETでODBCを使用してデータベースに接続しSQLを実行するサンプル [#a987dcfe]
.NETのOdbcConnection クラスなどを利用し、データベースにODBC接続するサンプルコードになります。~
SELECT, INSERT, UPDATE を実行してみます。

#htmlinsert(windev-top.html)
#contents

* 参考サイト [#q7ac6711]
-[[Microsoft .NET OdbcConnection クラス>https://docs.microsoft.com/ja-jp/dotnet/api/system.data.odbc.odbcconnection]]
-[[Microsoft .NET OdbcConnectionStringBuilder クラス>https://docs.microsoft.com/ja-jp/dotnet/api/system.data.odbc.odbcconnectionstringbuilder]]
-[[Microsoft .NET OdbcCommand クラス>https://docs.microsoft.com/ja-jp/dotnet/api/system.data.odbc.odbccommand]]

#htmlinsert(windev-top.html)

* 関連記事 [#y1e63a59]
-[[64bit版Windowsで32bit版ODBCの設定を行う方法>https://db.just4fun.biz/?ODBC/64bit%e7%89%88Windows%e3%81%a732bit%e7%89%88ODBC%e3%81%ae%e8%a8%ad%e5%ae%9a%e3%82%92%e8%a1%8c%e3%81%86%e6%96%b9%e6%b3%95]]

* 使用したデータベースとODBCドライバ [#c672c0e4]
-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

* 動作確認環境 [#oe41d037]
-Windows 10 ver.1909
-Visual Studio 2019
-.NET Framework 4.7.2~
''.NET Core 3.1で System.Data.Odbcを使用したい場合は、NuGet Galleryに公開されていますね。(2020/01/18現在)''~
https://www.nuget.org/packages/System.Data.Odbc/

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

* ODBC接続をしてSELECT, INSERT, UPDATE をするサンプルコード [#w6adf8be]
以下に C#, Visual Basic(VB) によるデータベース接続とデータベース操作のサンプルコードを記します。~
ODBCドライバのインストール、ODBCデータソース設定は完了していることを前提とします。~
以下のキャプチャでは、OdbcSampleDSNを設定しました。
#ref(01.png)
#br
サンプルコード内で CREATE TABLE, DROP TABLEも行っています。

** C# ODBCサンプルコード [#y7b200d2]
 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サンプルコード [#m7c96c21]
 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

** 実行結果 [#g2ffceb5]
上記サンプルコードを実行したときの出力になります。~
INSERT後のSELECTとUPDATE後のSELECTで取得した値が表示されます。
#ref(04.png)

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


#htmlinsert(windev-btm.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS