使用DataClassesDataContext连接远程数据库问题
使用DataClassesDataContext连接本地数据库时:
- C# code
public static DataClassesDataContext dataContext = new DataClassesDataContext(); private IQueryable<showAuction> getAuctionsInfo(int dayOfWeek, int pageNo, int pageSize, DataClassesDataContext dataContext) { IQueryable<showAuction> query = from auction in dataContext.showAuctions where auction.DayOfWeek == dayOfWeek select auction; foreach(showAuction s in query){ MessageBox.Show(s.ID+""); } return query; }
foreach循环正确,没异常。但是
使用DataClassesDataContext连接远程数据库时:
- C# code
public static DataClassesDataContext dataContext = new DataClassesDataContext("uid=****;pwd=****;Server=****,****;Database=****");
方法和上面的一样,但是在foreach循环中出现以下异常:
在从服务器接收结果是发生传输级错误。(provider:TCP provider,error:0-指定网络名不再可用)
经调试,发现query中的connection的state是closed状态。但是连接本地时state的状态是open,
为什么会这样哦?
[解决办法]
你先看一下你的远程连接是否真的能连接上。
[解决办法]
基于Linq的迟延执行特性,数据库的查询命令是你的foreach开始迭代时才被生成和执行的。
[解决办法]
[解决办法]
你再检查一下服务器的1433端口有无开放,包括防火墙的设置等。
建议你使用SQL Server Management Studio连接你的远程SQL Server服务器试试,有时能连接但会在登录时提示你这样的错误。
之前我们也遇到过同样的问题,Connection.Open()没有问题,但是一执行SQL查询就提示错误。后来就是发现防火墙设置里没有开放SQL Server默认的1433端口。
[解决办法]
1. 比较其他程序的连接串和连接方式
2. 再仔细排查SQL Server服务器的设置
具体问题得你自己解决了,呵呵。祝好运