タグ付けされた質問 「ado.net」

6
SqlClientをデフォルトでARITHABORT ONにする
まず最初に:互換性レベル80のデータベースでMS SQL Server 2008を使用し、.Netで接続していSystem.Data.SqlClient.SqlConnectionます。 パフォーマンス上の理由から、インデックス付きビューを作成しました。そのため、ビューで参照されるテーブルの更新はで行う必要がありますARITHABORT ON。ただし、プロファイラーはSqlClientがに接続していることを示しているARITHABORT OFFため、これらのテーブルの更新は失敗しています。 SqlClientを使用するための中央構成設定はありますARITHABORT ONか?私が見つけることができた最善の方法は、接続が開かれるたびに手動で実行することですが、これを行うために既存のコードベースを更新することはかなり大きなタスクになるので、より良い方法を見つけたいです。

3
「Chaos」分離レベルとは何ですか、いつ使用する必要がありますか?
ADO.NETのドキュメントには、SQLトランザクションのトランザクションレベルをChaosに設定する可能性が示されています。不快に聞こえますが、機能が存在する場合は、おそらく正当な使用方法があります。 BOL のSET TRANSACTION ISOLATION LEVELコマンド(ああ!わかりました、GoogleとBOLを使用できます)は何も「カオス」という名前ではないようです。ADO.NETには、「カオス」に加えて文書化されたレベル このカオスのレベルは何ですか?(そして、なぜそれは非友好的な名前を持っていますか?) 参照: ADO.NET列挙型

3
「SELECT @@ IDENTITY」が小数を返すのはなぜですか?
Dapperを使用して、ASP.NET MVC 3(.NET 4.0)アプリケーションからSQL Server 2008 R2 Expressインスタンスに対して次のクエリを実行しています。 INSERT INTO Customers ( Type, Name, Address, ContactName, ContactNumber, ContactEmail, Supplier) VALUES ( @Type, @Name, @Address, @ContactName, @ContactNumber, @ContactEmail, @Supplier) SELECT @@IDENTITY への呼び出しconnection.Query<int>(sql, ...)は、無効なキャスト例外をスローしています。デバッグしましたが、DapperがGetValue返されたを呼び出す時点SqlDataReaderです。 の戻り値の型GetValueはObject、デバッガーショーでそれを検査し、それがボックス10進数であることを示します。 selectをに変更するとSELECT CAST(@@IDENTITY as int)、GetValueの戻り値はボックス化されたintになり、例外はスローされません。 Id列は間違いなくint型です。なぜSELECT @@IDENTITY小数を返すのですか? 追加情報: データベースは真新しいです。 Customersテーブルは、私がそれに追加した唯一のオブジェクトです。データベースには、他の(ユーザー)テーブル、ビュー、トリガー、またはストアドプロシージャはありません。 データベースには10行があり、IDは1,2,3,4,5,6,7,8,9,10です(つまり、列はintの制限を超えていません)。 私のテーブル定義は CREATE TABLE [dbo].[Customers]( [Id] [int] IDENTITY(1,1) …

2
innodbステータスログでデッドロックを解読する際の問題
Microsoft ADO.NETコネクタからMySQLにアクセスしています。 ときどき、innodbステータスに次のデッドロックが発生し、問題の原因を特定できないことがあります。トランザクション(2)は同じロックを待機して保持しているように見えますか? ------------------------ LATEST DETECTED DEADLOCK ------------------------ 110606 5:35:09 *** (1) TRANSACTION: TRANSACTION 0 45321452, ACTIVE 0 sec, OS thread id 3804 starting index read mysql tables in use 1, locked 1 LOCK WAIT 2 lock struct(s), heap size 368, 1 row lock(s) MySQL thread id 84, query id …

1
C#コードおよびストアドプロシージャでトランザクションを処理する必要がありますか
データベースストアプロセスとC#の両方でトランザクション処理が本当に必要ですか? C#: Using(transaction with transaction scope) { Execute stored proc; Transaction. Complete; } SQLストアドプロシージャ: Create process As Begin try Begin transaction Commit End try Begin catch Rollback End catch

2
これらの2つのクエリを順番に実行すると、デッドロックが発生しますか?
これはほぼ間違いなく他の質問の原因ですが、改ざんまたは検証したい次のログに基づいて仮説があるので、2つを分ける価値があると思いました。 私の仮説では、他のデッドロックは実際には次のクエリの結果であり、innodbステータスが最新のトランザクションのみを表示するという理解に基づいて元のクエリが非表示になっています(これは正しいですか?)。 ログに基づいて、コードをチェックしたところ、次の2つのクエリが順番に実行されていることがわかりました。 db.Execute("UPDATE people SET iphone_device_id=NULL WHERE iphone_device_id=@0 AND people_id<>@1", DeviceID, m_User.people_id); // I have hard coded this query in this snippet to simplify things db.Execute("UPDATE people SET company_id = 444, name = 'Dad', password = '<pass>', temp_password = NULL, reset_password_hash = NULL, email = '<redacted>@gmail.com', phone = NULL, …

1
SQL Serverのすべての接続でARITHABORTをONに設定すると、どのような影響がありますか?
そのため、SQL Serverの不安定な動作は.Net SqlClientデータプロバイダーのデフォルト設定が原因であると判断しましたSET ARITHABORT OFF。そうは言っても、これを実装する最良の方法を議論するさまざまな記事を読んだことがあります。私にとっては、SQL Serverに問題があり、クエリのチューニングがアプリ全体で完全に超えていない(そして明らかにSETsp に追加しても機能しない)ため、簡単な方法が欲しいだけです。 Erland Sommarskogのこのトピックに関する素晴らしい記事では、基本的にアプリを変更SET ARITHABORT ONして接続用に発行することで安全なアプローチを取ることを提案しています。ただし、dba.stackexchange 質問からのこの回答では、Solomon Rutzkyがインスタンス全体とデータベース全体の両方のアプローチを提供しています。 これをインスタンス全体に設定すると、どのような影響がありますか?私が見ているように... SSMSにはONデフォルトでこれが設定されているONため、すべての接続に対してサーバー全体に設定しても問題はありません。結局のところ、何よりもこのSQL Serverを実行する必要があるだけです。

2
SSMSなどの個別の行数を取得するにはどうすればよいですか?
InfoMessageイベントでとエラー出力ExectueNonQueryをキャッチすることPRINTを含め、を介してストアドプロシージャを実行しているクライアントc#プログラムがあります。正常に動作しますが、変なことに気づきました。 SSMSからストアドプロシージャを実行すると、[メッセージ]タブで実行された個々のSQLステートメントの行数が表示されます(InfoMessageから送信されたかのように)。ただし、他の同じ出力はすべてキャッチしますが、プログラムはこれらのメッセージを表示しません。代わりに、ExecuteNonQuery関数の結果で影響を受ける行を返します。これは、個々の行カウントのすべての合計です(これは一種の役に立たないものです)。 たとえば、この手順は次のとおりです。 use [tempdb] go SELECT * INTO MyCols FROM sys.columns go CREATE PROC foo As UPDATE MyCols SET name = name + N'' -- SSMS shows (662 row(s) affected) UPDATE MyCols SET name = name + N'' WHERE name like '%x%' -- SSMS shows (59 row(s) affected) PRINT …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.