C# 如何正确填充数据集两次(在空集之后)
我有一个带有sqlquery的SqlConnection,它可能不会带来任何结果。这种情况很少发生,我有另一个sqlquery和另一个到数据库的连接。必须有更好的方法来做到这一点,不是吗 另一方面,这是否最好在填充后关闭连接?我想是的,但是还没有看到它在任何地方使用过 我还在C#/.Net的入门阶段——谢谢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
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相同(但更好,因为它将关闭连接,即使引发异常)。啊,太好了——我记得读过这方面的文章,但从未进行过调查。谢谢你的帮助。