Sqlite
データベースで動作するUWP
プロジェクトがあります。私は参考にsqlite-net-pcl
を追加しました。 をselect
というクエリで使用しますが、それは私にno such function: REGEXP
を与えます。 エラーを検索しましたが、結果は約SQLiteFunction
で、ここでは定義されていません。 どうすればよいですか?UWPの `sqlite-net-pcl`にREGEXPを使用する方法
答えて
終わりに私は1つでnuget
からsqlite-net-pcl
をインストールされていませんReferenceMangerのUniversal windows extensions
sqlite-net-pcl
パッケージには、sqlite3_create_function
メソッドがあります。
SQLiteConnection con = new SQLiteConnection(@"myDB.db");
SQLitePCL.raw.sqlite3_create_function(con.Handle, "REGEXP", 2, null, MatchRegex);
private void MatchRegex(sqlite3_context ctx, object user_data, sqlite3_value[] args)
{
bool isMatched = System.Text.RegularExpressions.Regex.IsMatch(SQLitePCL.raw.sqlite3_value_text(args[1]), SQLitePCL.raw.sqlite3_value_text(args[0]),RegexOptions.IgnoreCase);
if (isMatched)
SQLitePCL.raw.sqlite3_result_int(ctx, 1);
else
SQLitePCL.raw.sqlite3_result_int(ctx, 0);
}
この作品罰金:)
文献The LIKE, GLOB, REGEXP, and MATCH operators:
REGEXP演算子は、正規表現()ユーザ機能のための特別な構文です。 regexp()ユーザー関数はデフォルトでは定義されていないため、REGEXP演算子を使用すると通常はエラーメッセージが表示されます。 "regexp"という名前のapplication-defined SQL functionが実行時に追加された場合、 "X REGEXP Y"演算子は "regexp(Y、X)"の呼び出しとして実装されます。
REGEXPを使用するには、ユーザー定義関数を作成する必要があります。 SQLiteFunctionは、System.Data.SQLiteで簡単にユーザー定義関数を処理するように設計されたクラスです。しかし、System.Data.SQLiteはUWPアプリケーションでは使用できないSQLite用のADO.NETプロバイダです。
SQLite-net PCLには、このような方法はありません。しかし、SQLite-net PCLは、下にSQLitePCL.rawを使用しています。これは、SQLite用のC APIを中心とした非常に細いC#ラッパーであり、SQLiteへのローレベル(未処理)アクセスを提供します。 SQLitePCL.rawでは、@ Maryamの答えと同じようにユーザー定義関数を作成できます。あなたはかなりSQLiteのPCLのようなものを使用することができる場合は、次の操作を行うことができます
(ただし他のPCL、いないことを確認して働くことができる):
using System;
using SQLitePCL.pretty;
using System.Text.RegularExpressions;
namespace TestSqlite
{
class Program
{
static void Main(string[] args)
{
Func<ISQLiteValue, ISQLiteValue, ISQLiteValue> regexFunc =
(ISQLiteValue val, ISQLiteValue regexStr) =>
{
if (Regex.IsMatch(Convert.ToString(val), Convert.ToString(regexStr)))
return true.ToSQLiteValue();
return false.ToSQLiteValue();
};
SQLitePCL.Batteries.Init();
SQLiteDatabaseConnection _dbcon = SQLiteDatabaseConnectionBuilder
.InMemory
.WithScalarFunc("REGEXP", regexFunc)
.Build();
string sql = "CREATE TABLE foo (a int, b text);";
_dbcon.ExecuteAll(sql);
_dbcon.ExecuteAll(@"INSERT INTO foo VALUES (1, 'this is me');
INSERT INTO foo VALUES (2, 'that is me');
INSERT INTO foo VALUES (3, 'he is me');");
sql = "SELECT * FROM foo where '\\w{4} is me' REGEXP b;";
foreach (var row in _dbcon.Query(sql)) { Console.WriteLine(row[1].ToString()); }
}
}
}
- 1. Androidでregexpを使用してクエリを実行する方法
- 2. 場所でNginx Regexpを使用する方法
- 3. UWPアプリケーションにRelativePanelを使用する有効な方法
- 4. UWPで.p12を使用してデータに署名する方法
- 5. UWPログインレンダラーにXamarin.Authを使用する方法
- 6. RegExpをjavascriptで使用するには?
- 7. regexpの使い方
- 8. emacsの特定のregexpのためにalign-regexpをラップする方法
- 9. このRegExpを作成する方法
- 10. IISのリライトステートメントでRegExpを使用する
- 11. UWPプロジェクトでC#Interactiveを使用する方法
- 12. UWPで共有データを使用する方法
- 13. UWP Windows-10:Storeアプリケーションでスレッドローカルストレージapiを使用する方法
- 14. FiddlersでRegExp。$ 1を使用するCustomRules.js
- 15. sphinxでregexpを使用する
- 16. SQL ServerでRegExpを使用するストアドプロシージャ
- 17. regexpを使用してTravisログからMavenとGraleを区別する方法
- 18. PL/SQLでRegExpを使用して都市名を検証する方法
- 19. RegExpを使用して特殊文字列を取得する方法は?
- 20. regexpを使用してSpark DataFrameの文字列を置き換える方法
- 21. 純粋なANTファイルでregexpを適用する方法012
- 22. emacsでは、regexpの代わりにalign-regexpを使用できますか?
- 23. CoreWindow.KeyDownを使用せずにUWPアプリケーションでグローバルキーボード入力を取得する方法
- 24. regexpを使って変数の最後に\ nをマッチングする方法
- 25. UWP - PlaceholderTextにCharacterSpacingを適用する方法
- 26. UWPアプリでUCWAを使用してビジネスユーザーのプレゼンス/ステータスを購読する方法
- 27. 私のアプリからファイルをコピーする方法FileSavePicker UWPを使用して
- 28. UWPページのアプリケーションタイトルバーをカスタマイズする方法
- 29. UWP RadGridViewのコンテンツをエクスポートする方法
- 30. Windows 10のUWPでBluetoothを使用して印刷する方法
うわー! 'SQLite-net PCL'が' SQLitePCL.raw'上に構築されていることに気付かなかった。 'sqlite3_create_function'メソッドは' SQLite-net PCL'のメソッドではなく、 'SQLitePCL.raw'のメソッドです。とにかく、この問題の素晴らしい解決策です。 ;) –