簡體   English   中英

從存儲過程中的選擇中獲取結果

[英]Get result from select inside stored procedure

我在 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;
}

存儲過程是這樣的(它有很多參數,所以我刪除了很多):

@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

代碼和存儲過程工作正常,我可以插入值並返回輸出。 存儲過程也有一個選擇插入后我需要返回到json。

如何在從存儲過程返回返回參數的同時返回該選擇的值?

為此,您需要使用數據集來執行存儲過程。 我在下面修改了你的代碼。

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;
}

謝謝大家的回復。

我使用的解決方案是這個:

SqlDataReader dataReader = cmd.ExecuteReader();

DataTable dataTable = new DataTable();
dataTable.Load(dataReader);

returnParms[3] = string.Empty;
returnParms[3] = JsonConvert.SerializeObject(dataTable);

使用Newtonsoft轉換為json並且我的 SP 上有一些錯誤, int 是varchars

謝謝大家的幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM