0

У меня есть хранимая процедура, как показано ниже. Как я могу напечатать сообщение в выходном параметре @ErrorMsg на моей странице aspx.Как распечатать сообщение в параметре вывода SQL

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   

ответ

1

If вы хотите получить [@errormessage] и распечатать его на странице ASPX, тогда вам нужно использовать Par ameterDirection.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 

+0

Я выполнил ваш код, но исключение sql выбрано так: «Процедура или функция« ItemMasterIns »ожидает параметр« @ErrorMsg », который не был указан». Пожалуйста, помогите мне –

+0

Пожалуйста, попробуйте этот код. – 2013-03-29 00:45:54

0

Вы можете использовать печать, как следовать

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();