用.net写了个WebService服务器,其中一个方法就是从SQL数据库获取数据返回一个DataSet,C# Winform做客户端魂环调用,调用。1秒钟调用一次,一开始没问题,调用一段时间后后服务器端报错。
System.Web.Services.Protocols.SoapException: 服务器无法处理请求。
System.Exception: Fill: SelectCommand.Connection 属性尚未初始化
求大神指教,是服务器哪里没配置好吗?
这是链接数据库获取DataSet的方法
public static DataSet GetDataSet(string sqlText)
{
SqlConnection conn = getDefinedSQLConnection();
try
{
DataSet ds = new DataSet();
SqlConnection con = SqlDbHelper.getDefinedSQLConnection();
SqlDataAdapter da = new SqlDataAdapter(sqlText, con);
da.Fill(ds);
return ds;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
if (conn != null)
{
conn.Close();
conn.Dispose();
}
}
}
------解决思路----------------------
为什么要定义两个sqlconnection呢
public static DataSet GetDataSet(string sqlText)
{
try
{
DataSet ds = new DataSet();
SqlConnection con = SqlDbHelper.getDefinedSQLConnection(); //日志记录下con的connectionstring有没有被赋值
SqlDataAdapter da = new SqlDataAdapter(sqlText, con);
da.Fill(ds);
return ds;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
------解决思路----------------------
先不说代码.单看需求 你应该是要实现winfrom客户端实时刷新远程数据库的数据..
就这个来说 你这timer+webservice是最不好的了..
首先Service Broker+SqlDependcy称得上是绝配了.
另外使用tcp_client来做客户端接收"数据库"的信号,本地收到信号在查询 也是不错的方案..
下面我们在来说下你的代码
正如ls说的一样 每次查询开了2个连接而且只关闭了一个(哎?con.open在哪里....难道写在了getDefinedSQLConnection)
玩玩肯定会死.
然后就是所谓的错误
这个错误似乎应是sqlText=""了..
看下是不是这个原因.(我从来没遇到过这个错,可能说的有问题..)