6.7 OracleConnectionStringBuilderクラス
OracleConnectionStringBuilderオブジェクトによって、アプリケーションは接続文字列を作成し変更できます。
クラスの継承
System.Object
System.Data.Common.DbConnectionStringBuilder
Oracle.DataAccess.Client.OracleConnectionStringBuilder
宣言
// C# public sealed class OracleConnectionStringBuilder : DbConnectionStringBuilder
要件
| プロバイダ | ODP.NET管理対象外ドライバ | ODP.NET管理対象ドライバ |
|---|---|---|
|
アセンブリ |
|
|
|
ネームスペース |
|
|
|
.NET Framework |
3.5, 4.5, 4.6, 4.7 |
4.5, 4.6, 4.7 |
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
予約文字を使用して値を設定する場合には、次のルールに従う必要があります。
-
一重引用符で囲まれた文字を含む値
値に一重引用符で囲まれた文字が含まれる場合、値全体を二重引用符で囲む必要があります。
たとえば、値が
'scoTT'の場合、password ="'scoTT'"とします。 -
二重引用符で囲まれた文字を含む値
値は二重引用符で囲み、大/小文字の区別を順守して、値が大文字にならないようにする必要があります。
値に二重引用符で囲まれた文字が含まれる場合、値を一重引用符で囲む必要があります。
たとえば、値が
"scoTT"の場合、password ='"scoTT"'とします。 -
一重引用符と二重引用符の両方で囲まれた文字を含む値
値が一重引用符と二重引用符の両方で囲まれている場合、値を囲む引用符は、その値を使用するたびに二重に囲む必要があります。
たとえば、値が
"sco'TT"の場合、password ='"sco''TT"'とします。 -
スペースを含む値
先頭および末尾にあるすべてのスペースは無視されますが、値の間にあるスペースは認識されます。値の先頭または末尾にスペースが必要な場合、二重引用符で囲む必要があります。
たとえば、値が
<ScoTT>の場合、User ID =ScoTTとします。たとえば、値が
<ScoTT>の場合、User ID ="ScoTT "とします。 -
接続文字列内で複数回表示されるキーワード
指定したキーワードが接続文字列で複数回表示される場合、リストされた最後のキーワードが値セットで使用されます。
たとえば、
"User ID = scott; password = tiger; User ID = david"接続文字列の場合、User IDの値はdavidです。
悪意のあるアクセス(OracleConnectionStringBuilder、AddおよびItemのAPI)を制限するには、特殊文字を使用する接続文字列属性の前後に二重引用符を挿入します。文字列に特殊文字を使用するのは、フォーマット文字列攻撃方法になる可能性があります。属性への二重引用符の追加は、ほとんどの場合、データベース・アクセスに影響しません。ただし、パスワードなど、厳密な文字列の一致が必要な属性があります。OracleConnectionStringBuilderで特殊文字を含むパスワードに二重引用符を追加すると、データベースに対する認証に失敗する接続文字列が生成される可能性があります。
例
// C#
using System;
using System.Data;
using System.Data.Common;
using Oracle.DataAccess.Client;
using System.Collections;
class ConnectionStringBuilderSample
{
static void Main(string[] args)
{
bool bRet = false;
// Create an instance of OracleConnectionStringBuilder
OracleConnectionStringBuilder connStrBuilder =
new OracleConnectionStringBuilder();
// Add new key/value pairs to the connection string
connStrBuilder.Add("User Id", "scott");
connStrBuilder.Add("Password", "tiger");
connStrBuilder.Add("Data Source", "oracle");
connStrBuilder.Add("pooling", false);
// Modify the existing value
connStrBuilder["Data source"] = "inst1";
// Remove an entry from the connection string
bRet = connStrBuilder.Remove("pooling");
//ContainsKey indicates whether or not the specific key exist
//returns true even if the user has not specified it explicitly
Console.WriteLine("Enlist exist: " +
connStrBuilder.ContainsKey("Enlist"));
//returns false
connStrBuilder.ContainsKey("Invalid");
// ShouldSerialize indicates whether or not a specific key
// exists in connection string inherited from DbConnectionStringBuilder.
// returns true if the key is explicitly added the user otherwise false;
// this will return false as this key doesn't exists.
connStrBuilder.ShouldSerialize("user");
// returns false because this key is nott added by user explicitly.
connStrBuilder.ShouldSerialize("Enlist");
// IsFixedSize [read-only property]
Console.WriteLine("Connection String is fixed size only: "
+ connStrBuilder.IsFixedSize);
Console.WriteLine("Key/Value Pair Count: " + connStrBuilder.Count);
//adding a new key which is not supported by the provider
//is not allowed.
try
{
//this will throw an exception.
connStrBuilder.Add("NewKey", "newValue");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine("Key/Value Pair Count: " + connStrBuilder.Count);
//modifying a existing key is allowed.
connStrBuilder.Add("Enlist", false);
Console.WriteLine("Key/Value Pair Count: " + connStrBuilder.Count);
// Get all the keys and values supported by the provider.
ICollection keyCollection = connStrBuilder.Keys;
ICollection valueCollection = connStrBuilder.Values;
IEnumerator keys = keyCollection.GetEnumerator();
IEnumerator values = valueCollection.GetEnumerator();
while (keys.MoveNext())
{
values.MoveNext();
Console.WriteLine("Key: {0} Value: {1} \n"
,keys.Current ,values.Current);
}
}
}