C# 如何正确填充数据集两次(在空集之后)

C# 如何正确填充数据集两次(在空集之后),c#,asp.net,data-binding,dataset,C#,Asp.net,Data Binding,Dataset,我有一个带有sqlquery的SqlConnection,它可能不会带来任何结果。这种情况很少发生,我有另一个sqlquery和另一个到数据库的连接。必须有更好的方法来做到这一点,不是吗 另一方面,这是否最好在填充后关闭连接?我想是的,但是还没有看到它在任何地方使用过 我还在C#/.Net的入门阶段——谢谢 SqlConnection dbSqlConnection = new SqlConnection(--); SqlDataAdapter dbSqlDataAdapter = new Sq

我有一个带有sqlquery的SqlConnection,它可能不会带来任何结果。这种情况很少发生,我有另一个sqlquery和另一个到数据库的连接。必须有更好的方法来做到这一点,不是吗

另一方面,这是否最好在填充后关闭连接?我想是的,但是还没有看到它在任何地方使用过

我还在C#/.Net的入门阶段——谢谢

SqlConnection dbSqlConnection = new SqlConnection(--);
SqlDataAdapter dbSqlDataAdapter = new SqlDataAdapter(sqlquery, dbSqlConnection);
DataSet dbDataSet = new DataSet();
dbSqlDataAdapter.Fill(dbDataSet, "popGrid");
dbSqlConnection.Close();

if (dbDataSet.Tables["popGrid"].Rows.Count == 0)
{
    SqlDataAdapter newSqlDataAdapter = new SqlDataAdapter(sqlquery2, dbSqlConnection);
    newSqlDataAdapter.Fill(dbDataSet, "popGrid");
    dbSqlConnection.Close();

您可以进行单个查询,该查询执行以下操作:

Select * From SqlQuery1 Into TempTable1;

IF (SELECT Count(*) From TempTable1) = 0 BEGIN
  Select * From SqlQuery2;
ELSE
  Select * From TempTable1;
END
这是一个伪代码,因为我还没有测试过它,它是一种突发奇想。我写查询已经有一段时间了。所以,作为家庭作业,研究如何使用if语句测试如何确定临时表是否没有行,如果没有行,则返回不同的查询

编辑:


将两个查询放在一个查询中要比调用两个查询好得多。因此,除非你有很好的理由,否则很可能不值得这么做。

对于第一个问题,我认为如果你在检查第一个结果为空后连接到数据库两次也可以。您不必将这两个查询合并为一个查询,除非此操作(两次获取数据)非常频繁,或者连接到数据库需要花费很多时间(例如,您在美国,而数据库在英国,这是可能的,对吗?) 关于第二个问题:

using (SqlConnection dbSqlConnection = new SqlConnection(connStr))
{
    //do things
}//the connection will be disposed automatically here

是的,请始终关闭数据库连接-数据库本身的连接数量有限,因此如果打开的连接太多,则新的连接将失败。您需要有dbSqlConnection。请在if语句之后关闭。您只能打开SqlConnection一次,因此它应该关闭一次。如果你在它关闭后访问它,你会抛出一个异常。如果你不知道它是否有效,也许你不应该把它作为一个答案发布?PS:不行。伪代码不行吗?伪代码传达了一种含义,但不是为工作而设计的。直到你把它作为非伪代码发布,它才出现在这里。但是它不能以一种满足OPs要求的方式实现。SQL查询不能包含条件(存储过程可以,但那是另一回事)。我很感激你的回答,也许我会用它作为备份。但我对最初的问题更好奇。。。谢谢很好。这将自动调用.Dispose,这与手动调用.Close相同(但更好,因为它将关闭连接,即使引发异常)。啊,太好了——我记得读过这方面的文章,但从未进行过调查。谢谢你的帮助。