C# 产生结果时ConnectionString为空
有一个用于数据访问的基类,它完成所有连接和sql操作:C# 产生结果时ConnectionString为空,c#,connection,yield-return,C#,Connection,Yield Return,有一个用于数据访问的基类,它完成所有连接和sql操作: 公共类DataAccessBase { 受保护的DataAccessBase(字符串连接字符串) { InitSqlConnection(connectionString,byName); } 受保护的void InitSqlConnection(字符串connectionString,bool byName=false) { Connection=新的SqlConnection(byName?ConnectionStringMapper.
公共类DataAccessBase
{
受保护的DataAccessBase(字符串连接字符串)
{
InitSqlConnection(connectionString,byName);
}
受保护的void InitSqlConnection(字符串connectionString,bool byName=false)
{
Connection=新的SqlConnection(byName?ConnectionStringMapper.Current.GetConnectionStringByName(connectionString):connectionString);
}
受保护的SqlCommand CreateSqlCmd(字符串sqlQuery)
{
返回新的SqlCommand(sqlQuery,Connection);
}
受保护的数据表GetDataTable(SqlCommand sqlCmd)
{
sqlCmd.Transaction=\u事务;
DataTable=新的DataTable();
使用(SqlDataAdapter=newsqldataadapter(sqlCmd))
adapter.Fill(数据表);
返回数据表;
}
}
现在在派生类中,我编写了一个检索数据的方法:
内部IEnumerable GetData()
{
StringBuilder sql=新建StringBuilder(@“从[…]中选择…”);
SqlCommand cmd=CreateSqlCmd(sql);
DataTable=base.GetDataTable(cmd);
foreach(dataTable.Rows中的DataRow行)
产生返回行[“FileString”].ToString();
}
这种方法失败了。在base.GetDataTable
之前调试时,在cmd.Connection
中,ConnectionString
为空
但是当我使用
从dataTable中的DataRow行返回。行选择行[“FileString”]。ToString()
与迭代dataTable.Rows
和生成返回行[“FileString”].ToString()
不同,ConnectionString
是正确的
你知道收益率的问题是什么吗?为什么连接字符串为空?依我看,屈服与否并不重要
编辑:
当我将迭代和屈服移动到一个额外的函数并调用它时,它就工作了。比如:
内部IEnumerable GetData()
{
StringBuilder sql=新建StringBuilder(@“从[…]中选择…”);
SqlCommand cmd=CreateSqlCmd(sql);
DataTable=base.GetDataTable(cmd);
返回可计算(数据表);
}
私有IEnumerable\u到numerable(数据表)
{
foreach(table.Rows中的DataRow行)
产生返回行[“FileString”].ToString();
}
没有意义-是吗?为什么不像第一种方法那样在第二种方法中使用适配器呢。GetDataTable给出了一个异常,所以不要使用它。@jdweng我不是从DataAccessBase
编写代码的,我只是需要使用这个方法,我做了一些搜索,GetTable似乎只在c#Net库中的一个网络控件中。@jdweng你的意思是GetDataTable
?mhhGetDataTable
是该基类DataAccessBase
中的一个方法,所以它在您自己的自定义类中?您是否查看了代码以了解其失败的原因?