- 追加された行はこの色です。
- 削除された行はこの色です。
#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)