使用SQL Server的时候,我们可以传多个Select语句作为CommandText,一次执行,然后通过DataReader的NextResult方法访问多个Select语句返回的结果集,当然也可以用DataAdapter来填充DataSet。
下面的例子就是用一个DBCommand执行多个Select语句的代码片段。
myCommand.CommandText =
"UPDATE Books SET Price=Price*0.95 “ +
“SELECT BookName, Price FROM Books " +
"UPDATE Toys SET Price=Price*0.9 “ +
“SELECT ToyName, Price FROM Toys ";
SqlDataReader dreader = myCommand.ExecuteReader();
while (dreader.Read()) // process the first result set
{
Console.WriteLine(dreader.GetString(0) + ": "
+ dreader.GetSqlMoney(1).ToDouble());
}
dreader.NextResult(); // Move on to next result set
while (dreader.Read()) // process the second result set
{
Console.WriteLine(dreader.GetString(0) + ": "
+ dreader.GetSqlMoney(1).ToDouble() + "\n");
}
dreader.Close();
而当使用Oracle数据库的时候,这样的写法却会报错:ORA-00911: invalid character
这是因为Oracle不支持Multiple Statements的缘故。
如果你真的要这样写多个select语句而不想用存储过程的话,你可以通过anonymous block和ref cursors的方式来实现,同样,通过DataReader的NextResult方法访问多个Select语句返回的结果集。
string strSql = "begin open :refcur1 for select * from emp;" +
"open :refcur2 for select * from dept;" +
"open :refcur3 for select * from salgrade;end;";
myCommand.CommandText = strSql;
myCommand.Parameters.Add("refcur1", OracleType.Cursor).Direction = ParameterDirection.Output;
myCommand.Parameters.Add("refcur2", OracleType.Cursor).Direction = ParameterDirection.Output;
myCommand.Parameters.Add("refcur3", OracleType.Cursor).Direction = ParameterDirection.Output;
OracleDataReader dreader = myCommand.ExecuteReader();
while (dreader.Read())
{
//process the first result set
}
dreader.NextResult(); // Move on to next result set
while (dreader.Read())
{
//process the second result set
}
dreader.NextResult();
while (dreader.Read())
{
//process the third result set
}
dreader.Close();
原创文章,转载请注明: 转载自闲云博客
还没有任何评论。
留下评论







评论暂缺