2013-03-28 97 views
0

我有一个像下面这样的存储过程。我如何在我的aspx页面的输出参数@ErrorMsg中打印消息。如何在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

如果你想获得[@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',它没有提供。请帮我 – 2013-03-28 08:30:07

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