環境
Unity 2017.1
Windows10
PostgreSQL 9.6.3
.Net 4.6
前提
PostgreSQLはインストール済み、データベースとその中身も既にある
やること
1,https://github.com/npgsql/npgsql/releases から対応バージョンのmsiをダウンロード
どのバージョンがどういう対応しているかは今はわかんない
2,msiを実行・解凍し、「Npgsql.dll」をAssets以下のどこかに入れる
https://symfoware.blog.fc2.com/blog-entry-2386.html
↑以下こちらの記事から抜粋
取ってきたmsiを実行
「Npgsql GAC Installation」にチェックを入れてインストール。
すると、
C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\ (バージョンフォルダ)\
辺りにNpgsql.dllができる
3,UnityEditorのdllファイルが置いてある場所から、「System.Data.dll」をコピーして、同様に対象のプロジェクトのAssets以下のどこかに入れる
2017以降だと、
"Unityのダウンロード先\Editor\Data\Mono\lib\mono\2.0"
にある。EditorフォルダにUnityEditorの実行ファイルがあるので、ショートカットから辿ってもいい。
UnityHubだったらHubのメイン画面から「インストール→対象バージョンのメニューバー→エクスプローラーで開く」からダウンロード先フォルダに飛べる
###以上で環境構築が完了
ここまでで、対象のプロジェクトがこんな感じになっていればOK
#コード
using UnityEngine;
using Npgsql;
public class SQLExample: MonoBehaviour
{
void Start()
{
//ここを実行環境に合わせて変える
string connectionString =
"Server=ServerName;" +
"Database=DBName;" +
"User ID=Id;" +
"Password=Pass;";
using (var dbcon = new NpgsqlConnection(connectionString))
{
dbcon.Open();
NpgsqlCommand dbcmd = dbcon.CreateCommand();
// ここら辺を欲しい内容に合わせて変える
string sql =
"SELECT *" +
"FROM user_list";
dbcmd.CommandText = sql;
NpgsqlDataReader reader = dbcmd.ExecuteReader();
while (reader.Read())
{
// ここら辺を欲しい内容に合わせて変える
string FirstName = (string)reader["first_name"];
string LastName = (string)reader["last_name"];
Debug.Log(FirstName + " " + LastName);
}
// clean up
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
dbcon.Close();
}
}
}
コードはテストコードをコピーしているので適当
usingが冗長かな…?
再生ボタンを押すとクエリが実行される
UnityでMySQLではなくPostgreSQL を使いたかった
MySQLなら記事がたくさんあったが、PostgreSQLでは一切Unityに関する記事が見つからない
けど、PostgreSQLで過去に作ったDBがあり、どうしてもそこを使う必要があった
実際にやることはそんなに多くないが2時間以上調べるのにかかったのでつらかった
古い仕様
1, http://pgfoundry.org/frs/?group_id=1000140 からDLLのZipをダウンロード
URLのリンク切れでスポーツジムのサイトに飛ぶようになっているので直します
基本的には最新版の内、自分の環境にあったものを持ってくる。今回は.Net4.6だったので、「○○-net40.zip」を使った。多分「○○-net45.zip」でも動く