有时候操作数据库时,需要多次执行SQL语句插入到临时表,最后再统一提交到数据库中
但是如何及执行了每次存储,又更好的封装对应的执行SQL呢,想了想还是只有迭代器最方便
public IEnumerable<DataTable> YieldReturnDataTable(List<string> strsqls)
{
if (strsqls == null || strsqls.Count < 1)
{
yield return null;
yield break;
}
using (var connection = new SqlConnection(DbConnectionString))
{
connection.Open();
foreach (string strsql in strsqls)
{
var ds = new DataTable();
try
{
using (var cmd = new SqlCommand(strsql, connection))
{
cmd.CommandTimeout = DbCommandTimeout;
using (var dataAdapter = new SqlDataAdapter(cmd))
{
dataAdapter.Fill(ds);
}
}
}
catch (Exception ex)
{
Tools.Debug(String.Format("执行异常语句:{0} ,执行数据库:{1} ,报错: {2}", strsql, DbConnectionString, ex.Message));
Tools.Error(ex);
yield break;
}
yield return ds;
}
}
}
调用方式:
List<string> liststring = new List<string>();
foreach (DataTable dt in YieldReturnDataTable(liststring))
{
string str = dt.Rows[0][0].ToString();
if (str == "F")
{
return;
}
}
很好解决了,代码封装,又可以得到每次执行sql的结果集