一个 Command.
SqlCommand testCommand = conn.CreateCommand();
// 定义需要执行的SQL语句.
testCommand.CommandText = "testProc";
// 定义好,本次执行的类型,是存储过程.
testCommand.CommandType = CommandType.StoredProcedure;
// 执行SQL命令,结果存储到Reader中.
SqlDataReader testReader = testCommand.ExecuteReader();
// 处理检索出来的每一条数据.
while (testReader.Read())
{
// 将检索出来的数据,输出到屏幕上.
Console.WriteLine("调用函数:{0}; 返回:{1} - {2}",
testCommand.CommandText, testReader[0], testReader[1]
);
}
// 关闭Reader.
testReader.Close();
}
执行的结果将是:
调用函数:testProc; 返回:Hello 1 - World 1
调用函数:testProc; 返回:Hello 2 - World 2
(注意,只调用一次,返回2行结果。不是调用2次。)
对于 Oracle 来说,同样的存储过程,无法编译通过。
SQL> CREATE OR REPLACE PROCEDURE testProc
2 AS
3 BEGIN
4 SELECT 'Hello 1' AS A, 'World 1' AS B FROM DUAL UNION ALL
5 SELECT 'Hello 2' AS A, 'World 2' AS B FROM DUAL ;
6 END;
7 /
警告:创建的过程带有编译错误。
SQL> show err;
PROCEDURE TESTPROC出现错误:
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/3 PLS-00428: 在此 SELECT 语句中缺少 INTO 子句