C# 产生结果时ConnectionString为空

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.

有一个用于数据访问的基类,它完成所有连接和sql操作:

公共类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
?mhh
GetDataTable
是该基类
DataAccessBase
中的一个方法,所以它在您自己的自定义类中?您是否查看了代码以了解其失败的原因?