iBATISでNpgsql2.xを使う。

iBATISの設定方法は以下を参考にさせていただきました。
http://d.hatena.ne.jp/gsf_zero1/20070930/p1


まず、以下のDLLの参照追加*1

Npgsql.dll
Mono.Security.dll

SqlMap.configに設定を記述する。

<?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig
  xmlns="http://ibatis.apache.org/dataMapper"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <!--DBのユーザ命などは、別ファイルから取得するように設定-->
  <!--SqlMap.config中の${〜〜〜}は、下記ファイルで記述した値に置換されます。-->
  <properties >
    <property resource="./setting/properties.config"/>
  </properties>

  <settings>
    <setting useStatementNamespaces="true"/>
    <setting cacheModelsEnabled="false"/>
    <setting useReflectionOptimizer="true"/>
    <setting validateSqlMap="true"/>
  </settings>

  <providers resource="${root}\setting\providers.config"/>

  <database>
    <provider name="${provider}"/>
    <dataSource
        name="${DatasourceName}"
        connectionString="Server=${server};Port=${port};Database=${Database};User Id=${UserId};Password=${Passwd}"/>
  </database>

  <sqlMaps>

    <!-- ログイン -->
    <sqlMap resource="${root}\SQL\login.xml" />

  </sqlMaps>

</sqlMapConfig>


なお、分散トランザクションを使う場合は、connectionStringに"Enlist=true"を記述。

        connectionString="Server=${server};Port=5432;Database=${Database};User Id=${UserId};Password=${Passwd};Enlist=true"/>


properties.configを書いておきます。
SqlMap.configの${〜〜〜}を置き換える値を定義しています。

<?xml version="1.0" encoding="utf-8" ?>
<settings>
  <!--共通項目-->
  <add key="provider"               value="PostgreSql2.0.2.0"/>
  <add key="root"                   value="C:\MyProject" />

  <add key="server"                 value="localhost"/>
  <add key="port"                   value="5432"/>

  <add key="Database"               value="test_db"/>
  <add key="DatasourceName"         value="test_db"/>
  <add key="UserId"                 value="test_user" />
  <add key="Passwd"                 value="12345"/>
</settings>


providers.configを、下記のようにする。
*2

<?xml version="1.0" encoding="utf-8"?>
<providers
xmlns="http://ibatis.apache.org/providers"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <clear/>
  <provider
    name="PostgreSql2.0.2.0"
    description="PostgreSql, Npgsql provider V2.0.2.0"
    enabled="true"
    assemblyName="Npgsql, Version=2.0.2.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"
    connectionClass="Npgsql.NpgsqlConnection"
    commandClass="Npgsql.NpgsqlCommand"
    parameterClass="Npgsql.NpgsqlParameter"
    parameterDbTypeClass="NpgsqlTypes.NpgsqlDbType"
    parameterDbTypeProperty="NpgsqlDbType"
    dataAdapterClass="Npgsql.NpgsqlDataAdapter"
    commandBuilderClass="Npgsql.NpgsqlCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix=":"
    allowMARS="true"
  />
</providers>

以上で完成です。

*1:ASP.NETの場合はBinフォルダに入れる

*2:元からあったnpgsql用の設定から、nameとassemblyNameのVersionとPublicKeyTokenを変更しています。