問題タブ [idbcommand]
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# - DB への IDbCommand 出力を取得する方法は? (。ネット)
SqlCommand オブジェクトがあり、その ExecuteNonQuery メソッドを実行します。クエリは失敗しますが、クエリを取得してデバッグする方法がわかりません。私たちを手伝ってくれますか?
更新現在、コマンドを読み取るために Wireshark (tcpdump) を使用していますが、これは最善の解決策ではないと思います
更新CommandText プロパティは、ストアド プロシージャ名のみを提供します。パラメータを含むコマンド全体が必要です。
c# - 一般的なDbCommandを使用して非同期更新を行う方法はありますか?
一般的なDbCommandを使用して更新を実行する場合、更新される行がロックされていると、無期限にハングします。
使用される基本的な接続は、DevartのOracleプロバイダーであるDevart.Data.Oracle.OracleConnectionです。
DbCommand.CommandTimeOutを設定してもまったく効果がなく、更新がタイムアウトすることはありません。
DbCommandはBeginExecuteNonQueryを実装していないため、非同期でDbConnection/DbCommandを使用する方法はないようです。
DevartのOracleCommandとBeginExecuteQueryを使用してこれを回避することはできますが、それは可能です。
一般的な方法でこれを行う方法はありますか?
オラクル固有のロジックの簡略化されたコード:
.net - コマンドの実行後に SQL Server の物理メモリが増加する
SQL Server 2008 を使用して Windows Server 2008 でサーバー アプリケーションを実行しています。
カスタム接続プーリングを実装しました (なぜそれを行ったのかはまた別の長い話です)。したがって、リクエストごとに接続を開いたり閉じたりすることはありません。
サーバー アプリケーションは、プールで利用可能な 10 の接続を使用して、1 分間に数千を超える DBCommand を実行します。
コマンドの実行後、接続をクリーニングしていません(何をクリーニングし、閉じて再度開かずにクリーニングする方法がわからないため)、コマンドオブジェクト自体を破棄していません。
サーバー アプリケーションがダウンすると、close メソッドを呼び出してすべての接続を解放します。
ここで、sqlserver の 1 時間または 2 プロセスのテストの後、3Gig のメモリが使用されることを確認しました。その後、サーバー アプリケーションをシャットダウンしても、占有されていたメモリが解放または削減されませんでした (タスク マネージャーとリソース モニターによると)。 sqlserver を使用してメモリを解放します。
以下は私の質問です。
毎回 DBCommand オブジェクトの Dispose を呼び出す必要がありますか? はいの場合、接続オブジェクトに影響が残りますか?
上記の問題は、私が観察したことを引き起こしているか、他の理由もあります。
接続を閉じずにクリーンアップする方法と、DbCommand の実行ごとにクリーンアップする必要があるゴミの種類はありますか。
ありがとうムバシャール
asp.net - パラメーターを使用した ASP.NET (VB) の Select ステートメント - エラー: 入力文字列が正しい形式ではありませんでした
だから私はVBモジュールにいくつかのコードを持っています。whereステートメントにハードコーディングされた値を持つSQLステートメントでこれを実行すると、機能します。フォームがユーザーからの入力を除外できるように、モジュールにパラメーターを追加しようとしていますが、メッセージが表示されます:入力文字列は正しい形式ではありませんでした。
コードのセクションは次のとおりです。
私が言ったように、固定値のパラメーターを代用すると、すべて機能します。
eclipse - Eclipse とインテル Fortran デバッガー
私の問題は次のとおりです。
eclipse で idb intel デバッガーを使用して、コードを段階的に実行できるようにしたいと考えてidb -gui
います。私はすでにidb -gdbへの直接呼び出しをスクリプトに置き換える場所で見つけたソリューションを実装しようとしました:
これは、コマンドプロンプトが表示されるまでプログラムを開始するときに実際に機能します。今、私は次のエラーが発生します:
それは私がこれを解決しようとして丸一日を無駄にし、投稿することにしたときです. インテリジェントなアドバイスでさらに私を助けることができる人はいますか? どのようにidbをEclipseに統合しましたか?
乾杯、デビッド
c# - IDbCommand - CommandType.StoredProcedure
IDbCommand.CommandType
の値がパフォーマンスの点で違いを生むかどうかに興味がありますか?
CommandType.Text
基本的には、SQL クエリ"EXEC sp_my_stored_procedure ..."を CommandText として設定して渡すことができます。または、それを設定してCommandType.StoredProcedure
、ストアド プロシージャ名「my_stored_procedure」を CommandText として渡すこともできます。
ここでパフォーマンスに違いがあるのか 、それともSPを呼び出すクエリを渡すのとSPの名前を渡すだけの問題なのでしょうか。
補足として、ドライバーに依存する可能性があることは認識していますが、よくわかりません。それで、もしそうなら、私もそれを知りたいです。ありがとう!
sql - SQL: 更新はどの行にも影響しません
DB2/AS400 テーブルのデータセットを更新したいと考えています。
問題は、パラメーター リストに文字列パラメーターがある場合、コマンドが更新する行を見つけられないことです。
例: 会社番号のみを指定してコマンドを実行すると、コマンドは成功します。会社番号と施設番号を指定してコマンドを実行すると、コマンドが失敗します。
誰にもアイデアはありますか?
編集
データベースのデータ型は次のとおりです。
- 会社: 整数
- 機能: VARCHAR
- 部門: VARCHAR
- Production_Group: VARCHAR
- Manufacturing_Order:INTEGER
- Order_Operation: INTEGER
.NETのデータ型は次のとおりです。
- 会社番号: int
- 施設番号: 文字列
- 部署名: 文字列
- ProductionGroup: 文字列
- 製造順序: int
- 注文操作: int
sql.ToString() の結果:
c# - IDataReader から DataTable を取得するにはどうすればよいですか?
からDataTable
またはを取得しようとしていますが、失敗しています。コードは次のとおりです。DataSet
IDataReader
私は and を使用IDbConnection
しています。IDbCommand
これは、3 つの異なるデータベースで動作するためです (メソッドCreateConnection(provider, connectionString)
は、データベースに応じて特定の種類の接続を取得します)。私のクエリは ID (Int64 として) と DocNumber (Decimal として) を取得しますが、10 進数値を取得しようとするたびに、OverflowException
「変換オーバーフロー」というメッセージがスローされます。どちらの値も私にとって重要ですが、これらの値を取得する方法がわかりません。
実際には、コードを に変換しようとしていないためDataTable
、例外なく 2 つの値を取得する必要があります。
手助け?
c# - C#で汎用DB接続を使用してストアドプロシージャを呼び出す方法は?
C# (.Net 2.0) でストアド プロシージャを呼び出さなければならない場合があります。ODBC 接続を使用する場合もあれば、SQLClient を使用する場合もあります。将来的には、Oracle とも通信する必要があるかもしれません。
私のストアド プロシージャには、入出力パラメータと戻り値があります。
私の問題は、クライアントに関係なく一般的なコマンドを保存する方法が見つからないことです。IDbCommandオブジェクトを使用しています。
ODBC 接続では、次を定義する必要があります。
SQLclient コンテキストでは:
私は自分のコマンドを解析したくありません。一般的なコマンドを使用するためのより良い方法があると確信しています!
人々が再現できるようにするために、一般的なDB接続をどのように作成したかを以下に示します. 私のコンテキストでは、プロバイダー オブジェクトは構成ファイルから定義されます。
御時間ありがとうございます。
よろしく、ティボー。
database - パラメータを追加して汎用 IDbCommand を実行する方法
これが私の問題の詳細です。データベース (Odbc、OleDb、および SqlClient) との通信に必要なほとんどのオブジェクトを作成できるデータ アクセス レイヤー クラスを作成しました。また、ビジネス オブジェクトで多くのタスクを処理するために、Reflection を集中的に使用するビジネス オブジェクト処理レイヤー クラスも作成しました。とりわけ、このクラスは、DAL 処理 (SQL ストリーム、値のリスト、プロパティ、取得値の設定など) に必要なすべてのプロパティ/オブジェクトを生成します。詳細な説明については、以下のコードをご覧ください。
そのため、insert の場合DAL.SCRFL.GetParamStatement
はフォーマットされた文字列を返しINSERT INTO t1 (f1, f2, f3...) values (?, ?, ?...)
、update、delete、select ステートメントの場合は適切な文字列を返します。すべては反射で行われます。ここには構文エラーはありません。ダイレクト プロバイダー タイプのコマンドを使用して、返された値を手動で実行できます。このDAL.SCRFL.GetProperties
メソッドは、キー=プロパティ (フィールド)、値=フィールド値としてフォーマットされたハッシュテーブルを返します。
ここで、各プロパティのパラメーターを作成し、それをコマンド パラメーターに追加して実行する必要があります。この試みは、私のコードで確認できます (ハッシュ テーブルをループして、プロパティと値のペアごとにパラメーターを作成しています)。ただし、最後に説明で例外が発生しData type mismatch in criteria expression.
ます。type
パラメータオブジェクトなどにプロパティを追加しようとしましたsize
が、すべて失敗しました(コメントしました)。これが問題かもしれないと考えるようparam.Value = k.value
に変更しようとしましたが、私のビジネスクラスからのものであり、意図的に null 値を防止しています。何も機能しませんでした!これがテストです。ビジネスクラスの戻り値param.Value = If(IsDBNull(k.value), DBNull.Value, k.value)
k.value
DAL.SCRFL.GetParamStatement
call: テストは OleDb/Access データベースに対して行われ、ご覧のとおり、Memo フィールドを一重引用符で囲みました。私のリフレクション メソッドは、クラス プロパティの属性 (テーブル フィールド名に設定) を読み取りDAL.SCRFL.GetParamStatement
、挿入、更新、削除、および選択に使用する基本的な SQL ステートメントを作成します。AdapterCommandType
組み込みの列挙型です)。
SQL ステートメント (InvokeSql) を実行するこれに似た別のメソッドがあることに注意してください。ここでは、各プロパティの値の型を徹底的にチェックして、SQL ステートメントでプロパティ = 値のペアを作成します。このInvokeSql
メソッドで完全修飾された sql ステートメントを使用すると、単一の警告なしで機能します (概してcnn As IDbConnection = CreateConnection(), cmd = CreateCommand(_cmdText, cnn), cmd.ExecuteNonQuery()
、_cmdText
は sql ステートメントです。ご覧のとおり、パラメーターはありません!)。これは、ジェネリック IDbCommand でパラメーターを使用するたびに問題が発生することを指摘するために言及しています。私の DataFactory 内では、IDbCommand はプロバイダー固有のコマンド タイプに設定されていますが (私DataFactory.CreateCommand(s, cnn)
は汎用の IDbCommand を返します)。
DAL を開発する前は、上記のすべての手順を手動で行っていましたが、すべてのオブジェクト (コマンド、接続など) はプロバイダー固有の型として明示的に宣言されていました。技術的に言えば、一般的なタイプのオブジェクト (プロバイダー固有ではない) で使用したのとまったく同じシナリオを実行しています。しかし、私はそれを機能させることができません。おそらく、何かが欠けています。