热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

100分,求证这是不是sqlserver的一个bug?微软的答复不够明确

开始以为是netframework的问题后来改成了vs2008开发,访问局域网内数据库服务器,还是不行,排除了vs的问题。现在就只有sqlserver上的问题了,一台装的expre
开始以为是 netframework的问题

后来改成了vs2008开发,访问局域网内数据库服务器,还是不行,排除了vs的问题。

现在就只有sqlserver上的问题了 ,一台装的express版,另一台是企业版,数据库实例都是.\sqlexpress

原帖地址: http://topic.csdn.net/u/20101008/12/fa3829c2-4329-4724-8f37-8e2a8f94a1ca.html

问题描述:
开发环境:

c#桌面程序 不能通过ip地址本地以及远程访问sql2005  

SqlConnection cn =new SqlConnection(@"User ID=sa;password=qdxtd;Data Source=localhost【改为ip就会报错,改成远程服务器的主机名偶尔可以成功,访问本地数据库服务器名一切正常】\SQLEXPRESS;Initial Catalog=CardDB");


下面是程序中button click事件



SqlConnection cn =new SqlConnection(@"User ID=sa;password=qdxtd;Data Source=net\SQLEXPRESS;Initial Catalog=CardDB");
            SqlCommand cmd = new SqlCommand("SELECT * from t_cars", cn);
            SqlDataReader rdr = null;

            try
            {
                cn.Open();
                rdr = cmd.ExecuteReader();

                while (rdr.Read())
                    MessageBox.Show(rdr[0].ToString());
            }
            catch (SqlException sqlE)
            {
                //MessageBox.Show(sqlE.Number.ToString());
                MessageBox.Show(sqlE.Message);
            }
            finally
            {
                if (rdr != null)
                    rdr.Close();
            }




程序运行后的错误是:


  
************** 异常文本 **************
System.InvalidOperationException: 内部连接致命错误。
   在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   在 System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
   在 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
   在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
   在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
   在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
   在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
   在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
   在 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
   在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   在 System.Data.SqlClient.SqlConnection.Open()
   在 ReCard.MicroScan.button1_Click(Object sender, EventArgs e) 位置 E:\honeywell6100\ReCard\ReCard\MicroScanForm.cs:行号 32
   在 System.Windows.Forms.Control.OnClick(EventArgs e)
   在 System.Windows.Forms.Button.OnClick(EventArgs e)
   在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   在 System.Windows.Forms.Control.WndProc(Message& m)
   在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
   在 System.Windows.Forms.Button.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** 已加载的程序集 **************
mscorlib
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
ReCard
    程序集版本: 1.0.0.0
    Win32 版本: 1.0.0.0
    基本代码: file:///E:/honeywell6100/ReCard/ReCard/bin/Debug/ReCard.exe
----------------------------------------
System.Windows.Forms
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Data
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Transactions
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/assembly/GAC_32/System.Transactions/2.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------
System.EnterpriseServices
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/assembly/GAC_32/System.EnterpriseServices/2.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
----------------------------------------
System.Data.resources
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Data.resources/2.0.0.0_zh-CHS_b77a5c561934e089/System.Data.resources.dll
----------------------------------------
mscorlib.resources
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
System.Windows.Forms.resources
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_zh-CHS_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

************** JIT 调试 **************
要启用实时(JIT)调试,
该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置
jitDebugging 值。
编译应用程序时还必须启用
调试。

例如: 


    


启用 JIT 调试后,任何无法处理的异常
都将被发送到在此计算机上注册的 JIT 调试器,
而不是由此对话框处理。




开始的时候我怀疑我的设置错误
但是参考了很多资料都做了设置还是不行
举例:
 
关于开启Sql Server 2005 Express版本的远程连接功能(备忘) 
感谢 workflow !!
解决方式如下:
http://www.cnblogs.com/workflow/archive/2007/04/28/731272.html
主要要做的事情有:
1、登陆改为混合模式:以windows方式连接并进入数据库,右键点击你的数据服务器->属性->安全性>选中Sql server 和windows 验证方式。
2、启用TCP/IP和Named Pipes:进入Sql Server配置管理器,在网络配置->SqlExpress的协议中启用。
3、启用远程连接:sql server外围应用配置器->服务和连接的外围应用配置器->打开MSSQLSERVER节点下的Database Engine 节点,先择"远程连接",选择"同时使用TCP/IP和named pipes"

重启服务,一般这样配置后通过.\sqlexpress就能访问数据库了(除非防火墙问题),但如果是在另外一台电脑来访问的话,还是不行(在本机用127.0.0.1\sqlexpress也不行)。

后来找了n久资料,终于看到要开启Sql Server Browser服务!(在配置管理器->Sql Server 2005服务里面开启)。开启后就能在其他机器上来访问sql了。 




目前为止已经尝试了N种方式,均告失败。
机器都是新装的系统,没有杀毒软件,防火墙……





这是微软对类似问题的答复:
http://support.microsoft.com/kb/927105/zh-cn

39 个解决方案

#1


add

#2


呵呵 支持下吧 

#3


sql2005的外围配置连接要改一下就可以了

#4


内部链接错误 呵呵 帮顶

#5



如果你的数据量很大的话,换企业版的试试。

#6


在ERRORLOG里面或者windows 的事件查看器抛出什么错误。

#7


不过是配置问题吧
复杂问题先简单化,先不要管C#程序,在SSMS用IP是否可以连接数据库?不能的话说明是你配置问题,配置修改的地方并不多,全试下就行了。

#8


http://topic.csdn.net/u/20080626/15/20cd7a81-7fe8-459b-88dd-af3e15793ceb.html

#9


引用 6 楼 kechee 的回复:
sql2005的外围配置连接要改一下就可以了


改了,还是没什么效果

引用 8 楼 wxf163 的回复:
如果你的数据量很大的话,换企业版的试试。

数据库就几行测试用的数据

用了企业版了

引用 10 楼 haiwer 的回复:
不过是配置问题吧
复杂问题先简单化,先不要管C#程序,在SSMS用IP是否可以连接数据库?不能的话说明是你配置问题,配置修改的地方并不多,全试下就行了。


恩  这里面用ip地址也报错

#10


你外网的服务器IP是固定的吗?内网外网怎么连接的?

#11


引用 9 楼 obuntu 的回复:
在ERRORLOG里面或者windows 的事件查看器抛出什么错误。


恩 
我看到了几个错误

 SQL 网络接口库无法为 SQL Server 服务取消服务主体名称(SPN)的注册。错误: 0x54b。管理员应手动取消此 SPN 的注册,以避免客户端身份验证错误

#12


引用 13 楼 wxf163 的回复:
你外网的服务器IP是固定的吗?内网外网怎么连接的?


是在同一个局域网内的

#13


我现在在一台server2003的服务器上安装了 sql2005企业版

可是竟然没有数据库引擎。

服务器名显示的为空 输入localhost也登入不了了。

#14


看看 SQL Server Configuration Manager里的 TCP/IP 和 Named Pipes 

#15


我觉得不是数据库的问题

#16


引用 14 楼 qustdong 的回复:
引用 9 楼 obuntu 的回复:
在ERRORLOG里面或者windows 的事件查看器抛出什么错误。


恩 
我看到了几个错误

 SQL 网络接口库无法为 SQL Server 服务取消服务主体名称(SPN)的注册。错误: 0x54b。管理员应手动取消此 SPN 的注册,以避免客户端身份验证错误


看来不是bug,是版本2005的吗?
再看下这方面的相关设置吧。

#17


引用 19 楼 obuntu 的回复:
引用 14 楼 qustdong 的回复:

引用 9 楼 obuntu 的回复:
在ERRORLOG里面或者windows 的事件查看器抛出什么错误。



我看到了几个错误

SQL 网络接口库无法为 SQL Server 服务取消服务主体名称(SPN)的注册。错误: 0x54b。管理员应手动取消此 SPN 的注册,以避免客户端身份验证错误


看来不是bug,是版本……


现在server2005上安装sql2005 本机用ip可以访问了。

但是远程访问还是有问题。
虽然设置了很多

还是出现了问题

  在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 provider 命名管道提供程序, error 40 - 无法打开到 SQL Server 的连接


崩溃了

#18


好吧

我承认我错了

现在的问题是,用ip地址可以访问远程的数据库了。

但是使用远程数据库服务器的主机名访问还是会出现上述的错误。

求原因

#19


bug出在了我的身上啊 ……

provider 命名管道提供程序, error 40 - 无法打开到 SQL Server 的连接

用ip竟然可以正常访问了。谢天谢地。

现在我很想弄明白。用服务器名怎么就访问不了了呢?

#20


引用 23 楼 qustdong 的回复:
bug出在了我的身上啊 ……

provider 命名管道提供程序, error 40 - 无法打开到 SQL Server 的连接

用ip竟然可以正常访问了。谢天谢地。

现在我很想弄明白。用服务器名怎么就访问不了了呢?


服务器名ping 得通吗?

#21


如果ping不通
需要在host文件添加

#22


测试一下是否能连接上数据库如果能,看一下是不是配置问题。

#23


第2次赚分。。。。。

#24


在本机C:\Windows\System32\drivers\etc  下 hosts  中添加 对应记录 
远程服务器ip  远程服务器名
例: 
192.168.0.100 xmli-pc

#25


先顶,再标记,留待解决

#26


引用 26 楼 obuntu 的回复:
如果ping不通
需要在host文件添加

可以ping
也可以telnet

#27


不清楚,对这个不熟悉~!

#28


配置问题。搜下MSDN配置。

#29


MSDE

#30


这上面这条是什么东西啊
这都上来了

#31


恩,我遇到过你这问题,不过没出你这bug。

输入ip可访问,但有时就不行,那就改成输入 数据库名,又好了、、、  再不行,再换成ip的、、、、 一直下去。


不过,总有一个可行的。

期待你的解决方案。
能顺便把解决方案贴到我的博客留言板,最好。谢了。

#32


顶一个!遇到过类似的问题,确实需要总结一下!

#33


引用 37 楼 lfsfxy9 的回复:
恩,我遇到过你这问题,不过没出你这bug。

输入ip可访问,但有时就不行,那就改成输入 数据库名,又好了、、、 再不行,再换成ip的、、、、 一直下去。


不过,总有一个可行的。

期待你的解决方案。
能顺便把解决方案贴到我的博客留言板,最好。谢了。



感觉sqlxpress这个版本对于网络访问这方面做的 不是很好。

后来把数据库服务器改成了2005企业版。通过ip地址可以正常访问了。但是主机名访问就出现了错误

provider 命名管道提供程序, error 40 - 无法打开到 SQL Server 的连接



具体原因还不明白。可能得深究sql server的内部实现了。

网络这东西太复杂了。

推荐阅读
author-avatar
胡鹏锦_289
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有