【问题标题】:How to print message in SQL output parameter如何在 SQL 输出参数中打印消息
【发布时间】:2013-03-28 05:31:00
【问题描述】:

我有一个如下所示的存储过程。如何在我的 aspx 页面的输出参数 @ErrorMsg 中打印消息。

ALTER PROC [dbo].[ItemMasterIns]
(
    @ItemCode VARCHAR(30),
    @ItemDesc VARCHAR(100),
    @ErrorMsg VARCHAR(200) OUTPUT     
)
AS
BEGIN
     IF EXISTS ( SELECT 'X' FROM [DataBase].[dbo].[Table] WHERE Code= @Code )
     BEGIN
            SET @ErrorMsg = 'GIVEN CODE EXIST!'
            RETURN 0
     END
     ELSE
     BEGIN
            INSERT INTO [DataBase].[dbo].[Table]([Code], [Descr])
            VALUES (@Code, @Desc)
     END                   
END         

【问题讨论】:

    标签: asp.net sql sql-server stored-procedures output-parameter


    【解决方案1】:

    如果您想获取 [@errormessage] 并将其打印在 ASPX 页面上,那么您需要使用 ParameterDirection.Output

    根据您的评论,我编写了一个完整的代码并在我的本地进行了测试,它按预期工作。请再试一次。

    
    
        using System;
        using System.Data;
        using System.Data.SqlClient;
    
        namespace ConsoleApplication2
        {
            class Program
            {
                static void Main(string[] args)
                {
                    Program.RunSPWithParameterOutput();
                }
    
                public static void RunSPWithParameterOutput()
                {
                    string PredefinedConnectionString = "Data Source=localhost;Initial Catalog=Adventure;Integrated Security=SSPI";
    
                    using (SqlConnection conn = new SqlConnection(PredefinedConnectionString))
                    using (SqlCommand cmd = new SqlCommand("dbo.usp_ItemMasterIns", conn))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
    
                        // set up the parameters
                        cmd.Parameters.Add("@ItemsCode", SqlDbType.VarChar, 30);
                        cmd.Parameters.Add("@ItemsDesc", SqlDbType.VarChar, 30);
                        cmd.Parameters.Add("@ErrorMessage", SqlDbType.VarChar, 200).Direction = ParameterDirection.Output;
    
                        // set parameter values
                        cmd.Parameters["@ItemsCode"].Value = "test";
                        cmd.Parameters["@ItemsDesc"].Value = "test";
    
                        // open connection and execute stored procedure
                        conn.Open();
                        cmd.ExecuteNonQuery();
    
                        // read output value from @ErrorMessage
                        string ErrorMessage = cmd.Parameters["@ErrorMessage"].Value.ToString();
                        Console.WriteLine(ErrorMessage);
                        conn.Close();
                    }
                }
            }
        }
    
    

    测试部署在我本地的存储过程。

    
    
        create procedure usp_ItemMasterIns (@ItemsCode varchar(100),
                                            @ItemsDesc varchar(30),
                                            @ErrorMessage varchar(200) output
                                            )
        as 
        begin 
            set @ErrorMessage='test error message'
        end 
    
    

    【讨论】:

    • 我执行了你的代码,但是像这样抛出 sql 异常“过程或函数 'ItemMasterIns' 需要参数 '@ErrorMsg',但未提供。”请帮助我
    【解决方案2】:

    您可以按如下方式使用打印

    select * from sysobjects
    PRINT 'Just selected * from sysobjects'
    

    您可以在输出参数中设置值并在 C# 上获取它

    类似这样的:

    SqlCommand cmd = new SqlCommand("ItemMasterIns", cn);
    cmd.CommandType=CommandType.StoredProcedure;
    SqlParameter parm=new SqlParameter("@ItemCode",SqlDbType.VarChar);
    parm.Size=30; 
    parm.Direction =ParameterDirection.Input ; 
    cmd.Parameters.Add(parm); 
    
    SqlParameter parm2=new SqlParameter("@ItemDesc",SqlDbType.VarChar); 
    parm2.Size=100; 
    parm2.Direction =ParameterDirection.Input ; 
    cmd.Parameters.Add(parm2); 
    
    SqlParameter parm3=new SqlParameter("@ErrorMsg",SqlDbType.VarChar); 
    parm3.Size=200; 
    parm3.Direction =ParameterDirection.Output; 
    cmd.Parameters.Add(parm3); 
    
    cn.Open(); 
    cmd.ExecuteNonQuery();
    cn.Close(); 
    
    // Print the output value
    Console.WriteLine(cmd.Parameters["@ErrorMsg"].Value); 
    Console.ReadLine();
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2010-10-04
      • 1970-01-01
      • 2017-03-14
      • 2012-07-31
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多