连接不上SQL数据库

number321 2009-04-03 10:28:32
“/”应用程序中的服务器错误。
在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)

--------------------------------------

是.net2.0的程序,连接的是2000的数据库

出现这个提示的时候,防火墙提示有对外的攻击,是向外的某个IP的1433连接,一直在增加,等这个不增加时,数据库就又可以连上了


现在有3个问题
1.上面那个提示,好像不管什么原因,不管是2000或者2005都会报这个提示,是不是.net只有这个报错。。出现这个问题,就是单纯的连接超时呢,还是连接时被数据库拒绝,或者是TCP端口已经被占满,无法连接?

2.2000数据库怎样设置,可以防止恶意的数据库连接?可不可以强制让一个数据库在连接数大时,断开一些呢

3.怎样可以断开一台电脑上指定的TCP连接呢,或者用不重启网卡的方式断开呢
...全文
214 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdhdy 2009-04-03
  • 打赏
  • 举报
回复


exec sp_who 'active'
sdhdy 2009-04-03
  • 打赏
  • 举报
回复
sp_who
提供关于当前 Microsoft® SQL Server™ 用户和进程的信息。可以筛选返回的信息,以便只返回那些不是空闲的进程。

语法
sp_who [[@login_name =] 'login']

参数
[@login_name =] 'login'

是 SQL Server 上的用户登录名。login 的数据类型为 sysname,默认值是 NULL。如果没有指定名称,过程将报告全部活动的 SQL Server 用户。login 也可以是特定进程标识号码 (SPID)。若要返回有关活动进程的信息,请指定 ACTIVE。ACTIVE 从报告中排除等待用户下一个命令的进程。

返回代码值
0(成功)或 1(失败)

结果集
sp_who 返回包含以下信息的结果集。

列 数据类型 描述
spid smallint 系统进程 ID。
ecid smallint 与指定 SPID 相关联的给定线程的执行上下文 ID。
ECID = {0, 1, 2, 3, ...n},其中 0 始终表示主或父线程,并且 {1, 2, 3, ...n} 表示子线程。

status nchar(30) 进程状态。
loginame nchar(128) 与特定进程相关联的登录名。
hostname nchar(128) 每个进程的主机或计算机名。
blk char(5) 如果存在阻塞进程,则是该阻塞进程的系统进程 ID。否则该列为零。
当与给定的 spid 相关联的事务受到孤立分布式事务的阻塞时,该列将对阻塞孤立事务返回 '-2'。

dbname nchar(128) 进程使用的数据库。
cmd nchar(16) 为此进程执行的 SQL Server 命令(Transact-SQL 语句、SQL Server 内部引擎处理等)。


sp_who 结果集将根据 spid 值按升序排序。如果是并行处理,则会为特定的 spid 创建子线程。主线程表示为 spid =xxx,并且 ecid =0。其余的子线程同样也是 spid = xxx,但 ecid > 0。这样,将会为该 spid 编号返回多行 — 它们在整个列表中放置该 spid 的位置组合在一起。子线程将随机排列,但父线程除外 (ecid = 0);在该 spid 中,父线程被首先列出。

注释
阻塞进程(可能含有排它锁)是控制其它进程所需要的资源的进程。

在 SQL Server 2000 中,所有孤立 DTC 事务的 SPID 都被赋予值 '-2'。孤立 DTC 事务就是不与任何 SPID 相关联的分布式事务。这样,当某一孤立事务阻塞其它进程时,可由其特殊的 '-2' SPID 值来识别该孤立分布式事务。有关更多信息,请参见 KILL。

SQL Server 2000 保留从 1 到 50 的 SPID 值以便内部使用,而 51 或更大的 SPID 值则代表用户会话。

权限
执行权限默认授予 public 角色。

示例
A. 列出全部当前进程
此示例使用没有参数的 sp_who 报告所有当前用户。

USE master
EXEC sp_who

下面是结果集:

spid ecid status loginame hostname blk dbname cmd
---- ---- ------ ------------ -------- --- ------ -----
1 0 background sa 0 pubs LAZY WRITER
2 0 sleeping sa 0 pubs LOG WRITER
3 0 background sa 0 master SIGNAL HANDLER
4 0 background sa 0 pubs RA MANAGER
5 0 background sa 0 master TASK MANAGER
6 0 sleeping sa 0 pubs CHECKPOINT SLEEP
7 0 background sa 0 master TASK MANAGER
8 0 background sa 0 master TASK MANAGER
9 0 background sa 0 master TASK MANAGER
10 0 background sa 0 master TASK MANAGER
11 0 background sa 0 master TASK MANAGER
51 0 runnable DOMAIN\loginX serverX 0 Nwind BACKUP DATABASE
51 2 runnable DOMAIN\loginX serverX 0 Nwind BACKUP DATABASE
51 1 runnable DOMAIN\loginX serverX 0 Nwind BACKUP DATABASE
52 0 sleeping DOMAIN\loginX serverX 0 master AWAITING COMMAND
53 0 runnable DOMAIN\loginX serverX 0 pubs SELECT
(16 row(s) affected)

B. 列出特定用户的进程
此示例显示如何通过登录名查看有关单个当前用户的信息。

USE master
EXEC sp_who 'janetl'

C. 显示所有活动进程
USE master
EXEC sp_who 'active'

D. 通过进程 ID 显示特定进程
USE master
EXEC sp_who '10' --specifies the process_id

sdhdy 2009-04-03
  • 打赏
  • 举报
回复
sp_who
number321 2009-04-03
  • 打赏
  • 举报
回复
刚刚看了一下,好像连接数据库所在的服务器,TCP连接被占满了,导致不能连


那么在数据库端怎么看出哪个数据库被连接的最多呢

SQL2000的,怎么看连接数?
number321 2009-04-03
  • 打赏
  • 举报
回复
不是不能远程连接SQLSERVER,我的意思是说,之前一直是好的,可能是因为有某个站点向外连接太多

现在再连接数据库就有问题了,我不太清楚是什么原因。。。
claro 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 number321 的帖子:]
3.怎样可以断开一台电脑上指定的TCP连接呢,或者用不重启网卡的方式断开呢
[/Quote]
-->在[本地连接属性]的[TCP/IP协议]的[高级]属性
---->[高级TCP/IP设置]-[选项]中的[TCP/IP筛选]对话框中进行设置。
默认是全部启用,可根据受信任区IP或协议等进行设置。
  • 打赏
  • 举报
回复
出现这个提示的时候,防火墙提示有对外的攻击,是向外的某个IP的1433连接,一直在增加,等这个不增加时,数据库就又可以连上了

-->>可以设置防火墙,把1433端口设为例外,这样就不用关闭防火墙了

2.2000数据库怎样设置,可以防止恶意的数据库连接?可不可以强制让一个数据库在连接数大时,断开一些呢
-->>设置登陆账号和密码,sa密码设置为强密码

3、

sdhdy 2009-04-03
  • 打赏
  • 举报
回复
远程连接sql server 2000服务器的解决方案 

  一 看ping 服务器IP能否ping通。

  这个实际上是看和远程sql server 2000服务器的物理连接是否存在。如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务器的IP拼写正确。

  二 在Dos或命令行下输入telnet 服务器IP 端口,看能否连通。

  如telnet 202.114.100.100 1433

  通常端口值是1433,因为1433是sql server 2000的对于Tcp/IP的默认侦听端口。如果有问题,通常这一步会出问题。通常的提示是“……无法打开连接,连接失败"。

  如果这一步有问题,应该检查以下选项。

  1 检查远程服务器是否启动了sql server 2000服务。如果没有,则启动。

  2 检查服务器端有没启用Tcp/IP协议,因为远程连接(通过因特网)需要靠这个协议。检查方法是,在服务器上打开 开始菜单-> 程序-> Microsoft SQL Server-> 服务器网络实用工具,看启用的协议里是否有tcp/ip协议,如果没有,则启用它。

  3 检查服务器的tcp/ip端口是否配置为1433端口。仍然在服务器网络实用工具里查看启用协议里面的tcp/ip的属性,确保默认端口为1433,并且隐藏服务器复选框没有勾上。

  事实上,如果默认端口被修改,也是可以的,但是在客户端做telnet测试时,写服务器端口号时必须与服务器配置的端口号保持一致。如果隐藏服务器复选框被勾选,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接,但是Tcp/ip协议的默认端口将被隐式修改为2433,在客户端连接时必须作相应的改变。

  4 如果服务器端操作系统打过sp2补丁,则要对windows防火墙作一定的配置,要对它开放1433端口,通常在测试时可以直接关掉windows防火墙(其他的防火墙也关掉最好)。

  5 检查服务器是否在1433端口侦听。如果服务器没有在tcp连接的1433端口侦听,则是连接不上的。检查方法是在服务器的dos或命令行下面输入

  netstat -a -n 或者是netstat -an,在结果列表里看是否有类似 tcp 127.0.0.1 1433 listening 的项。如果没有,则通常需要给sql server 2000打上至少sp3的补丁。其实在服务器端启动查询分析器,输入 select @@version 执行后可以看到版本号,版本号在8.0.2039以下的都需要打补丁。

  如果以上都没问题,这时你再做telnet 服务器ip 1433 测试,将会看到屏幕一闪之后光标在左上角不停闪动。恭喜你,你马上可以开始在企业管理器或查询分析器连接了。

  三 检查客户端设置

  程序-> Microsoft SQL Server -> 客户端网络使用工具。像在服务器网络实用工具里一样,确保客户端tcp/ip协议启用,并且默认端口为1433(或其他端口,与服务器端保持一致就行)。

  四 在企业管理器里或查询那分析器连接测试

  企业管理器-> 右键SQlserver组-> 新建sqlserver注册-> 下一步-> 写入远程IP-> 下一步-> 选Sqlserver登陆-> 下一步-> 写入登陆名与密码(sa,password)-> 下一步-> 下一步-> 完成

  查询分析器-> 文件-> 连接-> 写入远程IP-> 写入登录名和密码(sa,password)-> 确定

  通常建议在查询分析器里做,因为默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是4秒,而查询分析器是15秒。

  修改默认连接超时的方法:

  企业管理器-> 工具-> 选项-> 在弹出的"SQL Server企业管理器属性"窗口中,点击"高级"选项卡-> 连接设置-> 在 登录超时(秒) 后面的框里输入一个较大的数字


  通常就可以连通了,如果提示错误,则进入下一步。

  五 错误产生的原因通常是由于SQL Server使用了"仅 Windows"的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa )进行连接。解决方法如下所示:

  1 在服务器端使用企业管理器,并且选择"使用 Windows 身份验证"连接上 SQL Server。

  2 展开"SQL Server组",鼠标右键点击SQL Server服务器的名称,选择"属性",再选择"安全性"选项卡。

  3 在"身份验证"下,选择"SQL Server和 Windows "。

  4 重新启动SQL Server服务。(在dos或命令行下面net stop mssqlserver停止服务,net start mssqlserver启动服务,也是一种快捷的方法)。
-狙击手- 2009-04-03
  • 打赏
  • 举报
回复
在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败

--

在SQLSERVER2005外围应用配置器里配置->服务与连接->database engine->远程链接
yygyogfny 2009-04-03
  • 打赏
  • 举报
回复
把防火墙关掉,1433端口是sql默认的端口
zmx_susan 2009-04-03
  • 打赏
  • 举报
回复
学习无止境啊,有学了一点

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧