23992


お助けください。

例えば、ふりがなが「おか」から始まる人物を検索しようとすると、「おが」から始まる人も  
ヒットしてしまいます。  
Accessのクエリではこのような問題は起こりません。  
なぜこのようなことが起こるのか、分かる方はいますでしょうか。

**環境**  
Windows 10 64bit  
Access 2013 64bit

  
**実行部分のコード**  

[code]

    var connectionStr = @"Provider=Microsoft.ACE.OLEDB.15.0;Data Source =" + dbfilePath;
    DbConnection = new OleDbConnection( connectionStr );
    DbConnection.Open();
    DbCommand = new OleDbCommand { Connection = DbConnection };
    
    var sql = "SELECT * FROM [名簿] WHERE [ふりがな] Like 'おか%'"
    var dataTable = new DataTable();
    
    using ( var sqlCommand = new OleDbCommand( sql, DbConnection ) )
        using ( var adapter = new OleDbDataAdapter( sqlCommand ) )
            adapter.Fill( dataTable );
    
[/code]

  
よろしくお願いします。


CC BY-SA 3.0
2016-04-13T12:58:13.983
23988
2016-04-13T14:29:02.620
10496
question
c# sql ms-access
C# OLE DB経由とAccessとでSQLの実行結果が違う


[Microsoft Jet 4.0の既知の不具合](https://support.microsoft.com/ja-jp/kb/935525)です。  
簡単に言うと、Access以外からクエリを発行した場合に`が`の内部表現が`か゛`のように二文字になるため、ワイルドカードの直前が清音の場合に濁音も該当してしまうという現象になります。

SQLで除外したいのであれば、

[code]

    InStr(1, [ふりがな], 'おが', 1) <> 1
    
[/code]

のような条件を追加する必要があるかと思います。


CC BY-SA 3.0
2016-04-13T14:29:02.620
23992
2016-04-13T14:29:02.620
5750
23988
answer