[英]Get result from select inside stored procedure
I have a stored procedure in Microsoft SQL Server that inserts data into a table and returns as output an error code and an error description.我在 Microsoft SQL Server 中有一个存储过程,该过程将数据插入表中并返回错误代码和错误描述作为输出。
private string[] SetServiceUpdateData(XmlDocument xmlDoc)
{
string[] returnParms = new string[2];
SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["Acessos"].ToString());
try
{
using (SqlCommand cmd = new SqlCommand("dbo.sp_ServiceUpdateData", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Id", SqlDbType.VarChar, 255).Value = ValidateParameter(xmlDoc.GetElementsByTagName("Id"));
cmd.Parameters.Add("@Status", SqlDbType.VarChar, 255).Value = ValidateParameter(xmlDoc.GetElementsByTagName("Status"));
cmd.Parameters.Add("@ERROR_CODE", SqlDbType.TinyInt, 4).Direction = ParameterDirection.Output;
cmd.Parameters.Add("@ERROR_DESCRIPTION", SqlDbType.VarChar, 255).Direction = ParameterDirection.Output;
conn.Open();
cmd.ExecuteNonQuery();
dataReader.Close();
returnParms[0] = Convert.ToString(cmd.Parameters["@Error_code"].Value);
returnParms[1] = Convert.ToString(cmd.Parameters["@ERROR_DESCRIPTION"].Value);
}
}
catch (Exception e)
{
returnParms[0] = returnParms[0] + e.Source;
returnParms[1] = returnParms[1] + e.Message;
}
finally
{
if ((conn != null) && (conn.State == ConnectionState.Open))
{
conn.Close();
conn.Dispose();
conn = null;
}
}
return returnParms;
}
The stored procedure is something like this (it has a lot of params so I deleted a lot of them):存储过程是这样的(它有很多参数,所以我删除了很多):
@Id varchar(255) = NULL,
@Status varchar(255) = NULL,
@ERROR_CODE TINYINT = NULL OUTPUT,
@ERROR_DESCRIPTION VARCHAR(255) = NULL OUTPUT
BEGIN
UPDATE TABLE
SET Status = ISNULL(@Status, Status)
WHERE Id = @Id
SELECT Status
FROM TABLE
WHERE Id = @Id
END
The code and the stored procedure work fine, I can Insert values and the outputs are returned.代码和存储过程工作正常,我可以插入值并返回输出。 The stored procedure also has a select after the insertion the I need to return to json.存储过程也有一个选择插入后我需要返回到json。
How do I return the value of that select at the same time as returning the return params from the stored procedure?如何在从存储过程返回返回参数的同时返回该选择的值?
For that you need to use dataset to execute stroredprocedure.为此,您需要使用数据集来执行存储过程。 i have modified your code below.我在下面修改了你的代码。
private string[] SetServiceUpdateData(XmlDocument xmlDoc)
{
string[] returnParms = new string[2];
SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["Acessos"].ToString());
try
{
using (SqlCommand cmd = new SqlCommand("dbo.sp_ServiceUpdateData", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Id", SqlDbType.VarChar, 255).Value = ValidateParameter(xmlDoc.GetElementsByTagName("Id"));
cmd.Parameters.Add("@Status", SqlDbType.VarChar, 255).Value = ValidateParameter(xmlDoc.GetElementsByTagName("Status"));
cmd.Parameters.Add("@ERROR_CODE", SqlDbType.TinyInt, 4).Direction = ParameterDirection.Output;
cmd.Parameters.Add("@ERROR_DESCRIPTION", SqlDbType.VarChar, 255).Direction = ParameterDirection.Output;
DataSet ds = new DataSet("MyDataSet");
conn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlComm;
da.Fill(ds);
dataReader.Close();
returnParms[0] = Convert.ToString(cmd.Parameters["@Error_code"].Value);
returnParms[1] = Convert.ToString(cmd.Parameters["@ERROR_DESCRIPTION"].Value);
}
}
catch (Exception e)
{
returnParms[0] = returnParms[0] + e.Source;
returnParms[1] = returnParms[1] + e.Message;
}
finally
{
if ((conn != null) && (conn.State == ConnectionState.Open))
{
conn.Close();
conn.Dispose();
conn = null;
}
}
return returnParms;
}
Thank you for all the replies.谢谢大家的回复。
The solution I used is this one:我使用的解决方案是这个:
SqlDataReader dataReader = cmd.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(dataReader);
returnParms[3] = string.Empty;
returnParms[3] = JsonConvert.SerializeObject(dataTable);
Using Newtonsoft
to convert to json
and I had some errors on my SP, ints that were varchars
.使用Newtonsoft
转换为json
并且我的 SP 上有一些错误, int 是varchars
。
Thank you all for the help谢谢大家的帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.