【发布时间】:2017-12-02 14:40:12
【问题描述】:
这是我的问题:我正在使用一个返回多个结果的存储过程,但我需要知道的是,如何将存储过程的“输出”值传递(检索)到数据集或数据表?
我使用SqlDataAdapter 和Fill 方法很好地捕获了从存储过程返回的结果集,这已解决,但我需要的是数据集或数据表中的输出值,因为这些值将包含一组输出数据。
我已经研究过,但我找不到任何东西来获取数据集或数据中的输出。
关于多个结果有很多问题,但已经解决了我不需要那个部分,因为我已经解决了,只有那些输出可以传递到数据集或数据表。
请原谅我的英语语法,因为我正在使用翻译,谢谢。
在存储过程返回后附加要嵌入数据集中的值。
C# 2010 和 SQL Server 2014
谢谢,但你没有理解我的问题,我会留下我的代码,以便你理解。
如您所见,我一切正常,存储过程返回 2 个表和一组输出数据,我使用 SqlDataAdapter 和 Fill 方法得到的两个结果表,以及输出值是单独分配的,但我不希望它是单独的,我需要数据集或数据表中的所有输出值,就像其他结果一样
// Function
private void procedure(decimal id, string date)
{
bool done = false;
SqlTransaction Transaction = null;
int value_return = 0;
try
{
// Function
open_conexion();
// Transaction
Transaccion = conexion.BeginTransaction(System.Data.IsolationLevel.Serializable);
SqlCommand command = new SqlCommand("NameStoreProcedure", conexion, Transaction);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Clear();
// Multiple resulsets
command.Parameters.AddWithValue("@id", id);
command.Parameters.AddWithValue("@date", date);
// Output values
command.Parameters.Add("@Value1", SqlDbType.VarChar, 2).Direction = ParameterDirection.Output;
command.Parameters.Add("@Value2", SqlDbType.DateTime).Direction = ParameterDirection.Output;
command.Parameters.Add("@Value3", SqlDbType.DateTime).Direction = ParameterDirection.Output;
command.Parameters.Add("@Value4", SqlDbType.DateTime).Direction = ParameterDirection.Output;
command.Parameters.Add("@Value5", SqlDbType.Char, 1).Direction = ParameterDirection.Output;
command.Parameters.Add("@Value6", SqlDbType.Decimal).Direction = ParameterDirection.Output;
command.Parameters.Add("@Value7", SqlDbType.Decimal).Direction = ParameterDirection.Output;
command.Parameters.Add("@Value8", SqlDbType.Char, 1).Direction = ParameterDirection.Output;
command.Parameters.Add("@Value9", SqlDbType.VarChar, 30).Direction = ParameterDirection.Output;
// Return Value
command.Parameters.Add("@return_value", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
DataSet dataset = new DataSet();
string output_values = string.Empty;
SqlDataAdapter dataadapter = new SqlDataAdapter(command);
// 2nd Resulset
dataadapter.Fill(dataset, "Table1, Table2");
// These values, instead of having them in a string variable, I need them in a //dataset or datatable
// Values Output
output_values = "Value1: " + Convert.ToString(command.Parameters["@Value1"].Value) + " \n" +
"Value2: " + Convert.ToString(command.Parameters["@Value2"].Value) + " \n" +
"Value3: " + Convert.ToString(command.Parameters["@Value3"].Value) + " \n" +
"Value4: " + Convert.ToString(command.Parameters["@Value4"].Value) + " \n" +
"Value5: " + Convert.ToString(command.Parameters["@Value5"].Value) + " \n" +
"Value6: " + Convert.ToString(command.Parameters["@Value6"].Value) + " \n" +
"Value7: " + Convert.ToString(command.Parameters["@Value7"].Value) + " \n" +
"Value8: " + Convert.ToString(command.Parameters["@Value8"].Value) + " \n" +
"Value9: " + Convert.ToString(command.Parameters["@Value9"].Value);
value_return = Convert.ToInt32(command.Parameters["@return_value"].Value);
if (value_return == 0)
{
done = true;
}
}
catch (SqlException exception)
{
MessageBox.Show("ERROR" + exception.Message, "ERROR ", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (done)
{
Transaction.Commit();
close_conexion();
}
else
{
Transaction.Rollback();
close_conexion();
}
}
}
【问题讨论】:
标签: c# sql-server database stored-procedures output