問題タブ [sql-server-ce]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - Ok/Cancel ボタンを使用してデータバインドされた WPF ダイアログのバッキング データ型を設計するにはどうすればよいですか?
一部のデータを保持するために使用している Microsoft Sql CE でテーブルを作成しました。SqlMetal を介して ORM を生成し、データソースを WPF プロジェクトに取り込みました。
ORM で生成されたクラスを介してテーブル内のレコードを編集するために使用できる単純な WPF フォームを作成したいと考えています。このフォームで、典型的な OK/Cancel セマンティクスをサポートしたいと考えています。ORM からのオブジェクトのインスタンスに対してバインドするために、それぞれのフィールドで TwoWay データバインディングを使用して、典型的な方法であると思われる方法でフォームを作成しました。たとえば、プロパティ「TaskName」を持つ ORM 内のオブジェクトが与えられた場合、WPF フォームに以下を含めました。
これを、コード内の DataContext 割り当てと組み合わせます。
新しい行の作成にはかなりうまく機能します。フォームを介して行われたすべての変更は、基になる OrmGeneratedClass にすぐに反映されます。問題は、たとえば OrmGeneratedClass が以前に保存された値で満たされている場合、変更をキャンセルするための即時サポートがないことです。
このシナリオに適した設計は何ですか? または、この時点に到達する前に間違った設計をしているのでしょうか? 私は WPF と Sql Server データソース/ORM 統合の面で初心者です。(これは、両方のテクノロジを学習するために使用している個人的なプロジェクトです。)
いくつかの考えがあり、それらを回答に入れます
java - Java から SQL Server Compact Edition (CE) を使用するには?
Java から Microsoft SQL Server Compact Edition データベースにアクセスしたいと考えています。どうやってやるの?SQLCE 用の JDBC ドライバーを検索しましたが、見つかりませんでした。
ms-access - ネットワークの場所を使用して Database Synchronizer にアクセスする
Access Database Synchronizerを使用して、ネットワーク上の場所に保存されている mdb と同期できた人はいますか?
ネットワーク ドライブをローカルの c: にマップしても機能しません。つまり、c:\test.mdb は機能しますが、z:\test.mdb は機能しません。
System.Data.SqlServerCe.SqlCeException「指定された接続文字列で SQL Server を開くことができませんでした」というエラーが発生するだけです。
mobile - SQLCE 接続: 開いたままにするか、閉じますか?
モバイル デバイスでのパフォーマンスを念頭に置いて、SQLCE 接続を使用する最善の方法は何だと思いますか。アプリケーションの実行中は開いたままにしておくか、データベースへの呼び出しが必要なときはいつでも閉じてください。
明らかに、これはアプリケーションの性質に少し依存しますが、グループが実装したものとその理由を知りたいです。
sql-server-ce - テーブルを表示するまで SQL CE 挿入が失敗する
私は何か奇妙なことが起こっていることに気づいています。Sql Server CE 3.5 で動作するようにアプリケーションを移植していて、奇妙なことが起こっていることがわかりました。
私が見ているのは、挿入が失敗し (主キー制約に違反)、Visual Studios サーバー エクスプローラーを使用してデータの表示関数でテーブルを開くまで失敗し続けることです。
コード内のすべての列 (主キーを除く) をパラメーター化SQL
して入力する場合でも、サーバー エクスプローラーから "INSERT INTO SecurityUser (UserName) VALUES ('ch00k')" を実行する場合でも、常に主キーの制約 (この場合は主キーはSecurityUserIDであり、それが自動インクリメントフィールドであることを再確認しました)、ビジュアルスタジオでテーブルを開くと、常に機能します(そして機能し続けます)。
誰かが前にこのようなものに出くわしたことがありますか? SQL
または、主キーを機能させるために、テーブルを作成するときに実行する必要がある余分なビットがありますか? create table コードは、Sql Server 2005 コードから直接移植されたばかりで、エラーなしで実行されます。
c# - Windows Mobile のデータ戦略
私は Windows Mobile で C# アプリケーションを開発していますが、ほとんどの WM アプリケーションと同様に、シリアライゼーション戦略を決定するときはいつも行き詰まります。デスクトップの世界では、かなり堅牢なカスタム xml シリアライザーを既に開発しているので、あまり心配していませんが、WM の世界では、リフレクションのパフォーマンスが低下するため、使用したくありません。
そのため、データ アクセス オブジェクト (DAO) インターフェイスに対してすべてを開発するので、xml、レジストリ、sqlce などにシリアル化するためのさまざまな実装を簡単に交換できます。 Dictionary<>) を使用し、データを永続化したい場合は XmlSerializer DAO を使用し、すべてが完了したら本格的な sqlce DAO に移動します。
ただし、私の最新のアプリでは、XmlSerializer DAO を使用できません。これは、インターフェイスであるプロパティを処理する (処理しない) 方法が悪いためです。IE、私は List< IBar > Bars プロパティを含む Foo オブジェクトを持っていますが、XmlSerializer はそれをシリアル化できません (ただし、独自のカスタム xml シリアライザーを簡単に開発できましたが、図に行くことができました)。
WM 用のアプリケーションを開発するのに役立つ DAO 戦略は何ですか? アプリの成熟度レベルが異なる複数の DAO を事前に計画していますか? 本格的な sqlce DAO から始めますか? XmlSerializer を使用できない場合、すばやく簡単に永続的なシリアル化 DAO をお勧めしますか?
performance - パフォーマンスを向上させるための SQL Like 演算子の適切な置き換えは何ですか?
項目の説明フィールド内に特定の文字列 (エンド ユーザーによって提供される) を含む項目テーブルからすべての項目を取得できる必要がある Windows Mobile 6 で実行されるアプリケーションに取り組んでいます。問題は、テーブルに約 170,000 の項目があることです。説明内の任意の場所に文字列を含むすべてのアイテムを返す必要があるため、LIKE %string% を使用する必要があり、インデックスを使用する機会がなくなります。データとテーブルの構造は、もともと Progress データベースに基づいており、単語インデックスのフィールドに素晴らしい contains 演算子があります。SQL Server Compact 3.5 を使用しているため、このモバイル アプリケーションには当てはまりません。
基本的に、私の DAL はクエリを実行し、SqlCeDataReader を取得してから、ItemFactory を使用して、一致した項目のみを含む List オブジェクトを作成します。これにより、明らかに、ドメイン/ビジネス オブジェクトをデータ アクセス層から切り離すことができます。
説明に「ゴルフ」のようなものを含むすべてのアイテムを検索するときにアイテムを取得するのにかかる8mと42秒を除いて、素晴らしくダンディです. 明らかに、これはエンド ユーザーにとって許容できる時間枠ではありません。
私の最初の試みは、代わりに SELECT * FROM Item を使用してデータベースからすべてのアイテムを取得することでした (メインのインデックス付きフィールドの 1 つに order by 句を使用)。この時点で、SqlCeDataReader を実行したときに IndexOf チェックを実行しましたItemFactory は、要求された説明テキストが含まれている場合にのみ List オブジェクトにアイテムを追加します. これにより、速度が 1 分 46 秒に改善されました. 粗末ではありませんが、それでも遅すぎます.
次に、約束を示した別のアプローチを試しました...ほとんど...アプリケーションの起動中に、データベース内のすべてのアイテムオブジェクトを含むリストを作成しようとしました(クエリを実行してリスト全体にデータを入力するのに約2分かかりますが、少なくとも、アプリの初期化中は 1 回だけです... まだ... うーん)。リストが完成したら、そのリストに対して次のようなことを行うクエリを簡単に実行できます (私の構文が正しいことを願っています... 私は今仕事をしておらず、PC に Visual Studio を持っていません)に座っています):
このアプローチにより、21 秒に短縮されました。とてもいいです(物事の壮大な計画ではまだ遅いですが)。ただし、問題は、データベースからすべてのアイテムをロードすると、メモリの使用量が多すぎることです。OutOfMemoryException がスローされていたため、最初のロード中に最後の 20,000 アイテムを実際にカットする必要がありました (つまり、21 秒の時間枠はおそらく 25 秒のようでした)。エミュレーターのメモリ マネージャーによると、まだ約 20 MB の空き RAM がありましたが、プロセスに関連付けられるのは 32 MB または RAM のみであると聞いています (WM 6 に当てはまるかどうかはわかりませんが、それで)。
List オブジェクトを使用してすべてのアイテムを保持していたためではないことを確認するために (動的なサイズ変更を避けるために、コンストラクターで必要な容量でインスタンス化していました)、これも読んだときに余分なメモリ使用量が発生する可能性があります。暗黙的にEnsureCapacityを呼び出します.Item[]配列を使用してみました(事前にサイズ調整されています)。これにはまだメモリの問題があり、サイズの違いはごくわずかでした。
わかりました。データリーダーによってデータベースから返されるレコードを(異なるタイプのフィールドでのインデックス付き検索を通じて)どのように制限する必要があるかを知っており、最大のパフォーマンスを得るために、アイテムの小さなサブセットで indexOf を使用する可能性があります(したがって、Like 演算子をすべてスキップします)。ただし、これにより、エンド ユーザーは説明検索以上のものを入力する必要があります (おそらく、検索するアイテムの種類を制限するためのアイテム階層情報)。
何か案は?私はこれについて間違った方法で進んでいますか?
聞いてくれてありがとう(この投稿は長くてすみません、私は大声で考えているようなものです).
ああ、私が使用しているものを(要約して)追加する必要があります:
- Windows モバイル 6
- SQL Server コンパクト エディション 3.5
- C# 3.5
更新: 以下で説明するブルーム フィルターのアプローチは興味深いように見えましたが、1 つの要件 (上記で実際には指定していません) を満たすことができませんでした。他の単語の中に含まれている単語と一致させることはできません (たとえば、"club" は "clubs" を返しません)。このため、私はまったく別のアプローチを使用することを余儀なくされました (Kent Fredric ... 指摘してくれてありがとう)。彼のアプローチが最も多くの要件を満たすものだったので、私はケントの答えを正しいものとしてマークしました(ミッチ、あなたはJaunderが提案したブルームフィルターと同様の問題を抱えていました)。しかし、私は彼の方法とは異なるアプローチを (今のところ...) 行ってきました。
私が行ったことは、アイテム番号と説明のみを使用して、すべてのアイテムオブジェクトをメモリにプルすることです(これにより、メモリの制限の下に保持されますが、それでも初期化に時間がかかります...マルチスレッドと舞台裏でその情報をロードしますアプリケーションの実行中にそれを処理できます)。検索を実行するために、独自の contains ルーチンを作成しました。ルーチンはアンマネージ C# コードで記述されており、2 つのポインターといくつかのループを使用して、説明と必要な一致テキストを実行します。説明のどこかに一致するものが見つかった場合は、項目番号を配列に追加します。すべてのアイテムが検索されると、新しいクエリがデータベースに戻り、一致するアイテム番号のみを取得します (整数フィールドのインデックスにより非常に高速です)。次に、それらのアイテムがすべての情報 (アイテム番号と説明だけでなく) を含むリストに作成されます。全体の操作には約 5 ~ 10 秒かかりますが (説明によって異なります)、今のところはこれで十分です。
これをさらに最適化することを検討します(検索語の文字数を追跡できる可能性があります...必要なテキストよりもアイテムの説明に残っている文字が少ない場合、ループは次のアイテムにまっすぐ続く可能性があります) .
どんな提案でも大歓迎です。今のところ、ケントの答えを私の質問に対して「最も正しい」とマークしました。
contains ルーチンの作成を手伝ってくれた Dolch に感謝します。
sql-server-ce - 型付き DataSet および DataGridView を使用した、最後に挿入されたレコード ID の問題
私は単純なデータベースアプリケーションに以下を使用しています:
- SQL Server Compact Edition .sdf ファイルをデータベースとして、int の主キー ID を使用。
- データ アクセス レイヤーとして型指定された DataSet および BindingSource
- データを表示するための DataGridView。
私の問題は、最後に挿入されたレコード/行 ID に問題があることです。ナビゲーター コンポーネントの追加ボタンを使用して datagridview に行を追加すると、新しいレコード/行の ID は -1 になります。TableAdapter.Update() を使用してデータをデータベースに保存した後でも -1 のままです。@@identity または scope_identity() を使用して別のクエリを使用して最後の ID を取得できることはわかっていますが、別のクエリを使用して手動でデータを更新する必要があるとは思えません。ここで何か不足していますか?データベースに保存し、挿入したレコードの ID を取得した後にデータを自動的に更新する方法はありますか?
また、データセット デザイナー -> テーブル アダプター構成 -> 詳細ウィンドウで "データテーブルを更新する" オプションを見ましたが、何らかの理由で無効になっています。でも関係あるのか分からない..
これについて何か助けていただければ幸いです..
sql-server - SQL Server Compact にはどのような制限がありますか? (または、MS プラットフォームで使用するデータベースをどのように選択しますか?)
データベースを必要とする MS Visual C# Express を使用して構築したいアプリケーション (必要になった場合は、Standard にアップグレードするつもりです)。
私は SQL Server Compact に夢中でした。私のアプリケーションを自分のコンピューターにインストールしようとしている人々に、SQL Server 全体などをインストールしてもらいたくないからです。エンドユーザーがインストールできるように、これをできるだけ簡単にしたいと考えています。
そのため、テーブルの列でできることには制限があるように見えるまで、私はすべて興奮していました。新しいデータベースを作成し、テーブルを作成しました。列を作成しようとすると、「テキスト」データ型がないように見えます.255文字に制限されているように見える「ntext」と呼ばれるものだけです。「int」は4つまでに制限されているようです(11が欲しかった)。また、「auto_increment」機能はないようです。
これらは私が一緒に暮らさなければならない本当の制限ですか?(または、「標準」ではなく「高速」を使用しているためですか)。これらが実際の制限である場合、私の要件を満たす他のデータベース オプションは何ですか? (大物ユーザーのための簡単なインストール - 私のエンドユーザーはコンピューターの平均的なユーザーであり、複雑な場合はアプリケーションに不満を感じると思います)
-アディーナ
PS: データベース データをエンド ユーザーに対して暗号化することも望んでいます。彼らがデータベーステーブルに直接アクセスできるようにしたくありません。
PPS。http://www.microsoft.com/Sqlserver/2005/en/us/compact.aspxを読み ましたが、これらの特定の制限に関する議論は見られませんでした
sql-server-ce - デスクトップ アプリケーションに Sql Server Compact を使用しますか?
デスクトップ アプリケーションに SQL Server Compact を使用することは理にかなっていますか?
- どのくらいのデータを処理できますか?
- 複数人での利用は可能ですか?制約は何ですか?
- データベース ファイルが破損するとどうなりますか? プログラムで回復することは可能ですか、それとも問題をリモートで簡単に解決できますか?