0

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

3 回答 3

1

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

存储过程输出参数asp.net c#

另一个例子

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

于 2013-01-04T11:11:12.000 回答
1

好吧,类似于 C#/java sql server 可以有try catch blocks 这里是链接:

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

您可以执行错误处理(oracle 可以更好地解决这个问题),或者您可以相对容易IF block地通过程序解决您的问题。FE,如果您返回某个数字(必须> 0),您可以对其进行检查,然后返回-1,或者如果您在过程中的选择没有返回任何条目,则返回任何内容。

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

select count(*) FROM table where .... 在您的情况下,您可以再次查询 DB 以获取具有您在过程中已经拥有的值的条目,如果返回值则返回 0/1

于 2013-01-04T11:14:40.323 回答
0

ExecuteNonQuery返回一个 int,它是受查询影响的行数。在您的示例中,如果存储过程成功执行,将插入一条记录,因此 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块,即无论是否有错误,它都会关闭您的连接。

于 2013-01-04T12:49:36.507 回答