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

さて、C#/ Java SQLサーバーと同様に、try catch blocks ここにリンクがあります:

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

IF blockエラー処理を実行できます(オラクルはこれをより適切に解決しています)、または手順で問題を比較的簡単に解決できます。FE いくつかの数値 (>0 でなければならない) を返す場合は、その数値をチェックして、-1 を返すか、手順内で選択したエントリが返されなかった場合は何でも返すことができます。

これらは、あなたの種類の問題を解決するための最も一般的な方法です。

あなたの場合、すでにプロシージャにある値を持つエントリについてDBにもう一度クエリを実行し、値を返す場合select count(*) FROM table where .... は0/1を返すことができます

于 2013-01-04T11:14:40.323 に答える
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 に答える
0

ExecuteNonQueryクエリの影響を受ける行数である int を返します。あなたの例では、ストアド プロシージャが正常に実行された場合、1 つのレコードが挿入されるため、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 finallyblock と同等です。つまり、エラーの有無にかかわらず接続を閉じます。

于 2013-01-04T12:49:36.507 に答える