public void MultipleResultSets(TestCaseResult result) { DropProcedure(); ExecuteNonQuery( "create procedure bar ()\n" + "{\n" + " declare i int;\n" + " declare c char;\n" + " result_names (i);\n" + " result (1);\n" + " result (2);\n" + " end_result ();\n" + " result_names (c);\n" + " result ('a');\n" + " result ('b');\n" + " return 0;\n" + "}\n" ); VirtuosoCommand command = connection.CreateCommand(); command.CommandType = CommandType.StoredProcedure; command.CommandText = "bar"; VirtuosoDataReader reader = null; try { reader = command.ExecuteReader(); result.FailIfNotEqual(1, reader.FieldCount); result.FailIfNotEqual("i", reader.GetName(0).ToLower()); result.FailIfNotEqual(typeof(int), reader.GetFieldType(0)); result.FailIfNotEqual(true, reader.Read()); result.FailIfNotEqual(1, reader["i"]); result.FailIfNotEqual(true, reader.Read()); result.FailIfNotEqual(2, reader["i"]); result.FailIfNotEqual(false, reader.Read()); result.FailIfNotEqual(true, reader.NextResult()); result.FailIfNotEqual(1, reader.FieldCount); result.FailIfNotEqual("c", reader.GetName(0).ToLower()); result.FailIfNotEqual(typeof(string), reader.GetFieldType(0)); result.FailIfNotEqual(true, reader.Read()); result.FailIfNotEqual("a", reader["c"]); result.FailIfNotEqual(true, reader.Read()); result.FailIfNotEqual("b", reader["c"]); result.FailIfNotEqual(false, reader.NextResult()); } finally { if (reader != null) { reader.Close(); } command.Dispose(); } }
public void ResultSetAndOutputParameters(TestCaseResult result) { DropProcedure(); DropProcedure(); ExecuteNonQuery( "create procedure bar (out x integer)\n" + "{\n" + " declare i int;\n" + " result_names (i);\n" + " result (1);\n" + " result (2);\n" + " x := 3;\n" + " return 4;\n" + "}\n" ); VirtuosoCommand command = connection.CreateCommand(); command.CommandType = CommandType.StoredProcedure; command.CommandText = "bar"; VirtuosoParameter returnValue = command.CreateParameter(); returnValue.ParameterName = "ReturnValue"; returnValue.Direction = ParameterDirection.ReturnValue; returnValue.VirtDbType = VirtDbType.Integer; command.Parameters.Add(returnValue); VirtuosoParameter x = command.CreateParameter(); x.ParameterName = "x"; x.Direction = ParameterDirection.Output; x.VirtDbType = VirtDbType.Integer; command.Parameters.Add(x); VirtuosoDataReader reader = null; bool closed = false; try { reader = command.ExecuteReader(); result.FailIfNotEqual(1, reader.FieldCount); result.FailIfNotEqual("i", reader.GetName(0).ToLower()); result.FailIfNotEqual(typeof(int), reader.GetFieldType(0)); result.FailIfNotEqual(true, reader.Read()); result.FailIfNotEqual(1, reader["i"]); result.FailIfNotEqual(true, reader.Read()); result.FailIfNotEqual(2, reader["i"]); result.FailIfNotEqual(false, reader.Read()); reader.Close(); closed = true; result.FailIfNotEqual("Out Parameter", 3, x.Value); result.FailIfNotEqual("Return Value", 4, returnValue.Value); } finally { if (reader != null && !closed) { reader.Close(); } command.Dispose(); } }