問題タブ [sqlclient]
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.
c# - SqlClient を使用して ADO.NET/C# 4.0 で SQL Server 2008 テーブルのロックを解除する方法は?
私はその前にメソッドを作成しました:
- テーブルをロックしました
- そこから値を読み取る
- 更新された値を書き戻しました
- テーブルのロックを解除しました
コードは Oracle で機能しました。現在、SQL Server 2008 では機能しません。方法は以下のとおりで、ロック解除コマンドを実行するとSqlException
、テキストが表示されます。
「NOLOC」は、認識されたテーブル ヒント オプションではありません。テーブル値関数または CHANGETABLE 関数のパラメーターとして意図されている場合は、データベース互換モードが 90 に設定されていることを確認してください。
コード:
それで、ここで何がうまくいかないのですか?このエラーはどこから来たのですか? サーバーまたはクライアント? Cコードからステートメントをコピーしましたが、そこで動作するはずです。残念ながら、デバッグして機能するかどうかを確認することはできません。
編集:(読み取りまたは更新せずに)ロックおよびロック解除しようとすると、同じ例外が発生します。
ありがとう & BR -マティ
c# - SQLServer2012テーブルの空間データ型の処理
いくつかの背景:
2つの異なるVMでSQLServerの2つの異なるインストールを実行しています。コード(SQL Server 2008 R2用に作成されたもの)からそれらに接続しようとしています。私の現在の.NETFrameworkのバージョンは4.0です。私のMicrosoftSQLServer 2008 R2インストールはそのために設計されたAdventureWorksを実行しており、私のSQL Server2012Expressインストールは新しいAdventureWorks2012データベースを実行しています。Person.Addressにクエリを実行しています。
現在、「DataTypeをnullにすることはできません」という例外が発生しています。返されたスキーマを見て、問題はSQLServer2012が
Microsoft.SqlServer.Types.SqlGeography
データ・タイプ。Type.GetTypeはこれを使用可能なものに変換できず、例外をスローするようです。私がやったことは何もないので安心しましたが、このコードは普遍的に機能するはずなので、私も困惑しています。このコードはSQLServer2008 R2で問題なく実行されることに注意してください(空間データ型がないため)。
私はこれを処理するための100の悪い方法を考えることができました。しかし、私はあなたたちに何をすべきかについての提案を求めに来たかったのです。.NETを4.5にアップグレードすると、状況は改善されますか?新しいデータ型に対応するためにコードを変更する必要がありますか?アプリケーションが空間データ型を処理しない場合、空間データ型について心配する必要がありますか?明らかにSqlClientとType.GetTypeはうまく機能しないため、これをどのように処理しますか。
ありがとうございました!
c# - プレーンな .NET 2 で SqlParameter の .TypeName が欠落している場合の回避策
プレーンな .NET2 フレームワーク (サービス パックなし) には、プロパティはありません。
私のアプリは、.NET2 SP1 がインストールされたマシン上に構築されています。それは何百もの他のマシンで実行され、そのうちのいくつかは .NET2 SP1 を持っておらず、おそらくそれらをインストールしないため、次の例外が発生します。
C# コードから、DataTable オブジェクトを入力として使用する SQL スクリプト (ストアド プロシージャ呼び出しはなく、SQL スクリプトのみ) を実行します。これは、C# コードからテーブル値パラメーターの名前を定義する必要があることを意味します (ストアド プロシージャを実行する場合、この名前はプロシージャの宣言で定義されているため、再度定義する必要はありません)。どうやら、.NET2 SP1 がインストールされていない場合、これを行うことはできません。
私の質問は:
プレーンな .NET2 フレームワーク (SP1 がインストールされていない) を使用して、C# コードからテーブル値パラメーターの名前を定義する方法はありますか? .NET2 の SP1 を使用せずに、C# コードからテーブル値入力を使用する単純な SQL スクリプトを実行するにはどうすればよいですか?
c# - ポートはSQLServerから自動的に収集されますか?
接続文字列を作成するときにポートを指定しなくても、[SERVER][INSTANCE_NAME]のような名前付きインスタンスを介してSQLServerに接続できることに気付きました。
sqlclientは自動的にポート番号を収集しますか?インスタンスがデフォルトのインスタンスであっても、ポート番号を気にする必要がありますか?
この質問が初心者のようでしたらごめんなさい。グーグルは私のために何も上げていない。
ありがとうございました!
sql-server - 変換された TIMESTAMP の SqlDataReader.GetString() の文字化け
私は、とりわけ、取得する SELECT を持っています。
ここで、TimeStamp は次のように定義されます
タイムスタンプの一部には不正なデータが含まれています。つまり、 "03/17/11"に変換される0x30332F31372F3131のようなものではなく、 0x0000000002F09ADDのように下位 4 バイトしかありません。
MSSMS クエリ ウィンドウで SELECT を実行すると、これらの悪いものが空白になりますが、これは問題ありませんが、プログラムで SqlDataReader を使用してそれらを取得すると、不正なタイムスタンプの文字列が" ðšÝ"
.
これについて私に何ができるかについてのアイデアはありますか?
c# - SQLServerの長時間実行クエリは.Netを介してランダムにタイムアウトします
DBに接続し、いくつかのストアドプロシージャを実行してデータを取得するプログラムがあります。
データベースはSQLServer2008であり、プログラムはローカルで実行されます。接続はTCP/IP経由ですが、共有メモリが有効になっています。また、接続文字列のタイムアウトは45秒に設定されています。
SQL Server Management Studioで実行すると、実行に0〜5秒かかります。コードを実行すると、ランダムにタイムアウトします。
テストを行うために、タイムアウトを45秒から数分に増やしました。また、ブロッキングの問題を破棄するために、ストアドプロシージャがデータのみを「選択」することを確認しました(挿入または更新ステートメントはありません)。そして、次のようなselectステートメントに対していくつかのテーブル修飾子を試しました:、、nolock
.. readpast
..
また、チェックsp_who2
しdbcc opentran()
たところ、何もブロックされていません...そして.NetのSPIDはですrunning command ...
。.NetがDBの応答を待機している間の詳細については、SQL Server Management Studioを使用して、同じステートメント(ストアドプロシージャまたは選択)を問題なく実行できます。
何が起こっているのかについての提案はありますか?
oracle - オラクル データベース クライアント
フリーウェアのoracle sql クライアントを教えてください。GUI が付属している必要はありませんが、Oracle ドライバーを必要とせずにリモート データベースに接続できる必要があります。SQL Plus または Sql Developer があることは知っていますが、登録しないとダウンロードできません。何も強制されない、本当に自由な何かが欲しい...
プラットフォーム: Win/Debian
ありがとうございました
c# - SqlXmlを渡すときにSqlClientが不要なXML変換を使用するのはなぜですか?
C# コードからクエリに xml データ型を渡すことについて質問があります。
まず、SQL Server のテーブルを次に示します。
次に、C# で作成されたアプリケーションがあります。そして、アプリケーションから行を挿入XmlTable
します。
コードは次のとおりです。
すべて正常に動作し、行が挿入されます。しかし、SQL プロファイラーを実行して挿入コマンドを調べると、次のように表示されます。
SqlXml
型をクエリに渡しているにもかかわらず、SqlClient
文字列から XML への不必要な変換が行われていることがわかります。XML パーサーは無駄な作業を行います。
問題は、なぜSqlClient
このようにするのですか? そして、どうすれば余分な変換なしでそれを行うことができますか?
vb.net - DataTable を読み取り専用にする方法は?
DataTable オブジェクトを返す関数を作成しています。を使用しDataTable.Load( DataReader)
て DataTable にデータを入力しています。ただし、私が理解しているように、基になる DataReader は ReadOnly、Forward-only です。DataTable に読み込まれると、DataTable.Rows(x).Column(y).ReadOnly = False
他のプログラマーは、値を設定してからデータを更新することができます。
関数が返す DataTable が ReadOnly であることを確認する方法はありますか? 昔の ADODB では、ADODB.LockTypeEnum を使用して、返されたレコードセットが読み取り専用であることをマークしていました。
ReadOnly とは、(返された DataTable を取得する) 関数の呼び出し元が Rows データを変更したり、まったく更新したりできないことを意味します (つまり、読み取り専用)。
multithreading - 一連の SQL クエリを実行し、メイン UI スレッドからそれらをキャンセルできる必要があります。最善のアプローチは何ですか?
現在、順番に実行する必要があるいくつかのクエリがあります (いくつかは、後のクエリで取得する一時テーブルを作成します)。
クエリはBackgroundWorker
スレッドで実行されます。現在、クエリがある場合は、CancellationPending
クエリ呼び出しの間にメソッドから抜け出します。
ただし、このアプローチには問題があります。単一のクエリが長時間実行されたり、返されなかったりする場合があるため、ポーリング中に各クエリを実行できる必要がありますBackgroundWorker.CancellationPending
。
この場合に使用するのに最適な非同期パターンは何ですか? 各クエリに入力する必要がありDataTable
ますが、時間がかかりすぎる場合はキャンセルできます。