我创建了一个管理数据库数据的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范围)。
答案 0 :(得分:2)
简短的回答是否。
来自文档:
SQL Server的.NET Framework数据提供程序(SqlClient)使用它 自己的协议与SQL Server进行通信。它很轻巧 表现良好,因为它已经过优化,可以直接访问SQL Server 无需添加OLE DB或开放式数据库连接(ODBC)层。 下图对比了.NET Framework数据提供程序 适用于OLE DB的.NET Framework数据提供程序的SQL Server。该 用于OLE DB的.NET Framework数据提供程序与OLE DB数据通信 通过提供的OLE DB服务组件来源 连接池和事务服务以及OLE DB提供程序 对于数据源。
http://msdn.microsoft.com/en-us/library/a6cd7c08.aspx
那么......怎么了?
正如其他评论员指出的那样,你对异常处理有所了解;实际的异常似乎没有被捕获。
鉴于你已经说过同样的exe工作在其他3台机器上,你真的需要实际的异常消息来判断它是否是:
如果你想发布LoadComboBoxes的代码(或者至少是数据库工作的那一部分),那么这可能有助于我们提供一些进一步的建议。
答案 1 :(得分:1)
不,这不是由SQL Express引起的,并不是强制要求你安装它来运行应用程序,但它似乎确实缺少了一个DLL。我首先检查你是否安装了框架4.0。此外,如果您使用的是不在.NET框架中的库,请确保在所需的引用属性上设置Copy Local = true。
答案 2 :(得分:0)
我100%确定您不需要安装SQL客户端来访问数据库。
答案 3 :(得分:0)
看看LoadComboBoxes例程如何打开连接。连接字符串中的某些内容是否在该计算机上不正确? .nEt框架应该已经包含了连接到Sql的所有pre-req。