服务器 A;
客户端 B;A上网方式:路由+交换机+花生壳域名解析;
B上网方式:和A属于不同的广域网.网络连接方式可拨号或代理.A:SQL Server 8.0个人版、操作系统Windows 2003 Server.
B:C#(Winfrom)客户段、任意操作系统. 连接SQL方式为SqlConnection、SqlDataAdapter、DataSet对象.
A上网配置:路由器里做好了80、1433端口的UDP、TCP协议的映射.并指定了DMZ主机为A.SQL Server所有网络协议均启用.目前状态:从外网通过IE访问A的WEB服务,没问题.
         从外网通过客户端B访问A的Sql Server服务器无法连接. 
         把客户端装至同A一个局域网内的某台电脑可以访问A的SQL Server服务器.以下是客户端的连接代码:
public SqlConnection con;
public SqlDataAdapter da;
public DataSet ds;
string strConn="server=220.170.0.4;uid=sa;pwd=sa;database=DGZLCRM";
con= new SqlConnection (strConn);
con.Open();//连接完毕
da = new SqlDataAdapter();//适配器
da.SelectCommand=new SqlCommand("select * from temp",con);
ds = new DataSet ();//记录集
da.Fill(ds,"temp");出现无法访问现象.
请教这种做法是否可行,或是需要另换其他方式连接,
  使用SQL XML的支持可实现远程客户端操纵远程SQL Server数据库吗?问题 二:
  使用SQL自带的SQL XML支持配置IIS的虚拟路径,为什么配置好后提示HTTP404错误?具体配置如下:站点路径为D:\Web
             虚拟目录为nwind
             dboject对象为dboject
             schema对象的路径是D:\Web\nwind\schema
             template对象的路径是D:\Web\nwind\template
             ISAPI位置为:C:\Program Files\Common Files\System\Ole DB\sqlisapi.dll
(用IIS管理器打开nwind虚拟目录打开配置应用程序窗口,编辑这个ISAPI路径时,你就是打开后不改这个路径都不能点确定:会提示(包含空格的项目的文件/路径部分需要用括号括起来)为次我把路径两头加双引号还是HTTP404错误或服务器内部错误、把sqlisapi.dll文件拷贝出来,放到C盘根目录,然后把nwind虚拟目录的应用程序的ISAPI位置改为C盘的目录、OK~不提示要用括号了,但还是无法访问下面的XML文件.
             D:\Web\nwind\template文件夹下有   first.xml  文件.代码如下:<root xmlns:sql="urn:schemas-microsoft-com:xml-sql" >
  <sql:query>
    SELECT *
    FROM Employee
    FOR XML auto
  </sql:query>
</root>为此我在template文件夹下建了个htm文件,同样提示找不到文件或目录.访问的地址在IE里输入的是:
http://localhost/nwind/template/first.xml
http://localhost/nwind/template/test.htm请指教.

解决方案 »

  1.   

    问题一,应该是可以的.如查你的ip确定是外网IP.但这种方式不好.安全性太差了.把整个数据库放到外网上很不理想.你应该用vpn.这样无论是开发.还是安全性都要高很多.问题二,没用过.///*************************///
    这两年来慢慢习惯了光说不练
    ///*************************///
      

  2.   

    问题终于解决了.
    以下是远程(外网-->上网方式拨号或代理局域网)访问SQL Server服务器(上网方式拨号或代理局域网)的方法:
           由于特定需求,最近实验室需要远程连接外地的sql server 2000服务器,最开始怎么连也连不上,出现了很多问题,但是在今天上午,借用实验室的测试条件(一个公网IP,两个教育网静态IP),终于调试通过,也算是完成了老师的任务,在这里写下自己的心得,参考了很多网上的文章和论坛里的问题,希望对有此需要的有帮助。不完善之处,也请留言。废话少说,进入主题。
    步骤:
    一 看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启动服务,也是一种快捷的方法)。附注:在连接本地服务器时,通常使用的是命名管道协议(在服务器网络实用工具里可以看到启用的协议有这个),默认端口是445,因此在本地能连通是不能说明什么问题的,连接远程服务器是完全不同的协议)再次连接,享受连接成功的喜悦吧,别忘了飞狐小屋哦。文章为转载,前提请做好端口映射,最好也开发DMZ主机,这样重重问题测试通过后保证能访问得了.
      

  3.   

    一般来说连接外网的数据库,肯定先ping看看,这个是基本的~呵呵
      

  4.   

    telnet [IP] 1433
    连不上就是端口没开开
      

  5.   

    你这是C/S应用,太危险了,直接把Sql裸露出公网
      

  6.   

    其实可以做个TELNET终端服务,设置个本机用户,通过远程桌面连接比较安全.只要在本机安装客户端就可以了,多建立几个帐户就可以让更多的人访问了,没必要那么复杂又不安全.
      

  7.   

    直接连数据库是比较危险,的
    而且这东西就算好使了那个企业愿意这么用,谁敢保证花生壳 不盗取用户信息啊如果程序比较大不能改成b/s 或多层的
    就用 VPN 吧,不过保证服务端固定ip!