存储过程中的返回值

时间:2013-01-04 11:08:39

标签: asp.net sql-server

我在asp.net和SQL Server 2005中工作。

我想知道如何从存储过程返回一个值,或者我们如何知道查询是否已在存储过程中成功执行。例如,我将一些数据插入SQL Server数据库,我想通过使用返回值检查它是否正确插入。这是代码

存储过程..

  ALTER PROCEDURE [dbo].[practice]
-- Add the parameters for the stored procedure here

@thename varchar(50),
@thedate datetime,

   AS
  BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
insert into tblpractice (name,date) values (@thename,@thedate)

END 

代码隐藏..

     string name=txtname.Text.Trim();
     DateTime date = Convert.ToDateTime(txtdate.Text);
     try
     {
        SqlCommand cmd = new SqlCommand("practice", lcon);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@thename", name);
        cmd.Parameters.AddWithValue("@thedate", date);
        lcon.Open();
        cmd.ExecuteNonQuery();


     }
     catch
     {
       throw;

     }
     finally
     {
        if (lcon != null)
        {
            lcon.Close();
        }
     }

3 个答案:

答案 0 :(得分:1)

使用输出参数,您可以从商店过程中获取值。这是一个很好的例子

Stored procedure output parameter asp.net c#

另一个例子

http://www.c-sharpcorner.com/UploadFile/rohatash/get-out-parameter-from-a-stored-procedure-in-Asp-Net/

答案 1 :(得分:1)

好吧,simmilar到C#/ java sql server可以有try catch blocks 这是链接:

http://msdn.microsoft.com/en-us/library/ms175976.aspx

您可以预先形成错误处理(oracle可以更好地解决这个问题),或者您可以相对轻松地执行IF block来解决您的问题。 F.E.如果你返回一些数字(必须是> 0),你可以对它进行预先检查,如果你在程序中的选择没有返回任何条目,则返回-1或者是什么。

这些是解决您的问题的最常用方法。

在您的情况下,您可以再次查询数据库,查找包含过程中已有值的条目,如果select count(*) FROM table where ....返回值,则返回0/1

答案 2 :(得分:0)

ExecuteNonQuery返回一个int,它是受查询影响的行数。在您的示例中,如果存储的proc成功执行,将插入一条记录,因此ExecuteNonQuery应返回1.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

当您处理using个对象时,也应使用IDisposable,例如

using (var lcon = new SqlConnection(connectionString))
{
    using (var cmd = new SqlCommand("practice", lcon))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@thename", name);
        cmd.Parameters.AddWithValue("@thedate", date);
        lcon.Open();
        return cmd.ExecuteNonQuery();
    }
}

这相当于try catch finally阻止,即无论是否有错误,它都会关闭你的连接。