2

我创建了一个管理数据库数据的 C3 WPF 应用程序。到目前为止,我已经在 3 台单独的 PC 上成功使用了它,但它在第四次崩溃了。例外是:

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 客户端,但在提供错误的那台上没有。
在应用程序中,我正在引用System.Data.SqlClient,但似乎这还不够。

如上所述,这第四台 PC 是否需要安装独立的 SQL 客户端?

[编辑] 可能的解决方案需要从 SQL Server 禁用防火墙。问题可能在于它正在将没有本地 IP 的人踢出去(第四台 PC 来自不同的地点,具有不同的 IP 范围)。

4

4 回答 4

2

简短的回答是否

从文档中:

SQL Server 的 .NET Framework 数据提供程序 (SqlClient) 使用自己的协议与 SQL Server 进行通信。它是轻量级的并且性能良好,因为它经过优化可以直接访问 SQL Server , 而无需添加 OLE DB 或开放式数据库连接 (ODBC) 层。下图将用于 SQL Server 的 .NET Framework 数据提供程序与用于 OLE DB 的 .NET Framework 数据提供程序进行了对比。用于 OLE DB 的 .NET Framework 数据提供程序通过提供连接池和事务服务的 OLE DB 服务组件和数据源的 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,不是必须安装它才能运行应用程序,但似乎确实缺少 DLL。我将首先检查您是否安装了框架 4.0。此外,如果您使用的库不在 .NET 框架中,请确保在所需的引用属性上设置 Copy Local = true。

于 2012-08-27T08:41:08.817 回答
0

我 100% 确定您不需要安装 SQL 客户端来访问数据库。

于 2012-08-27T08:34:10.170 回答
0

看看您的 LoadComboBoxes 例程是如何打开连接的。连接字符串中有什么东西在那台机器上不正确吗?.nEt 框架应该已经包含连接到 Sql 的所有先决条件。

于 2012-08-27T08:43:53.400 回答