2

データベース上のデータを管理するC3WPFアプリケーションを作成しました。これまでのところ、3台の別々のPCで正常に使用できましたが、4番目にクラッシュします。例外は次のとおりです。

Faulting application name: LakeSmitFautLog.exe, version: 1.0.0.0, time stamp: 0x503b19ee
Faulting module name: KERNELBASE.dll, version: 6.1.7601.17651, time stamp: 0x4e2111c0
Exception code: 0xe0434352

Application: LakeSmitFautLog.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Data.SqlClient.SqlException
Stack:
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at LakeSmitFautLog.MainWindow.LoadComboBoxes()
   at LakeSmitFautLog.MainWindow..ctor()
   at LakeSmitFautLog.initxaml.btnEnter_Click(System.Object, System.Windows.RoutedEventArgs)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(System.Object, System.Windows.RoutedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(System.Object, System.Windows.RoutedEventArgs, Boolean)
   at System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject, System.Windows.RoutedEventArgs)
   at System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs)
   at System.Windows.Controls.Primitives.ButtonBase.OnClick()
   at System.Windows.Controls.Button.OnClick()
   at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs)
   at System.Windows.UIElement.OnMouseLeftButtonUpThunk(System.Object, System.Windows.Input.MouseButtonEventArgs)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate, System.Object)
   at System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate, System.Object)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(System.Object, System.Windows.RoutedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(System.Object, System.Windows.RoutedEventArgs, Boolean)
   at System.Windows.UIElement.ReRaiseEventAs(System.Windows.DependencyObject, System.Windows.RoutedEventArgs, System.Windows.RoutedEvent)
   at System.Windows.UIElement.OnMouseUpThunk(System.Object, System.Windows.Input.MouseButtonEventArgs)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate, System.Object)
   at System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate, System.Object)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(System.Object, System.Windows.RoutedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(System.Object, System.Windows.RoutedEventArgs, Boolean)
   at System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject, System.Windows.RoutedEventArgs)
   at System.Windows.UIElement.RaiseTrustedEvent(System.Windows.RoutedEventArgs)
   at System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs, Boolean)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputManager.ProcessInput(System.Windows.Input.InputEventArgs)
   at System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr, System.Windows.Input.InputMode, Int32, System.Windows.Input.RawMouseActions, Int32, Int32, Int32)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr, MS.Internal.Interop.WindowMessage, IntPtr, IntPtr, Boolean ByRef)
   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Application.RunDispatcher(System.Object)
   at System.Windows.Application.RunInternal(System.Windows.Window)
   at System.Windows.Application.Run(System.Windows.Window)
   at LakeSmitFautLog.App.Main()

最初の3台のPCには、スタンドアロンのMS SQLクライアントがインストールされていますが、エラーを提供しているPCにはインストールされていません。
アプリで参考System.Data.SqlClientにしていますが、これだけでは足りないようです。

上記のように、この4番目のPCにはスタンドアロンSQLクライアントをインストールする必要がありますか?

[編集]考えられる解決策は、SQLServerからファイアウォールを無効にすることです。問題は、ローカルIPを持っていない人々を追い出していることかもしれません(4番目のPCは、異なるIP範囲で、異なる場所からのものです)。

4

4 に答える 4

2

短い答えはいいえです。

ドキュメントから:

.NET Framework Data Provider for SQL Server (SqlClient) は、独自のプロトコルを使用して SQL Server と通信します。 OLE DB または Open Database Connectivity (ODBC) レイヤーを追加せずにSQL Serverに直接アクセスするように最適化されているため、軽量でパフォーマンスが優れています。次の図は、.NET Framework Data Provider for SQL Server と .NET Framework Data Provider for OLE DB を対比しています。.NET Framework Data Provider for OLE DB は、接続プールとトランザクション サービスを提供する OLE DB Service コンポーネントと、データ ソースの OLE DB プロバイダーの両方を介して OLE DB データ ソースと通信します。

Microsoft Sql クライアント データベース アクセス

http://msdn.microsoft.com/en-us/library/a6cd7c08.aspx

元気?

他のコメンテーターが指摘しているように、あなたは例外処理が苦手です。実際の例外はどこにもキャッチされていないようです。

同じ exe が他の 3 台のマシンで動作していると言った場合、実際の例外メッセージが次のいずれかであるかどうかを判断する必要があります。

  1. 環境 (マシンがデータベース サーバーに接続できない可能性があります)
  2. ユーザーベース (データベースサーバーに接続する権限を持っていない実行中のユーザー)
  3. 時間ベース (サーバーが利用できなかったため、接続に失敗しました。)

LoadComboBoxes のコード (または少なくともデータベースを動作させる部分) を投稿したい場合は、さらに提案を提供するのに役立つかもしれません。

于 2012-08-27T09:06:00.997 に答える
1

いいえ、これは SQL Express によるものではありません。アプリを実行するために SQL Express をインストールする必要はありませんが、DLL が不足しているようです。フレームワーク 4.0 がインストールされているかどうかを確認することから始めます。また、.NET フレームワークにないライブラリを使用している場合は、必要な参照プロパティで Copy Local = true を設定してください。

于 2012-08-27T08:41:08.817 に答える
0

データベースにアクセスするために SQL クライアントをインストールする必要がないことは 100% 確信しています。

于 2012-08-27T08:34:10.170 に答える
0

LoadComboBoxes ルーチンがどのように接続を開いているかを見てください。接続文字列に、そのマシンで正しくないものがありますか? .nEt フレームワークには、Sql に接続するためのすべての前提条件が既に含まれているはずです。

于 2012-08-27T08:43:53.400 に答える