どのようにADO.NETとVisual C〓NETを使ってパラメータの記憶過程を呼び出しますか?

13136 ワード

ADO.NETを使用して記憶プロセスを起動し、リターン値とリターンパラメータを取得するための様々な方法がある.
  • は、DataSetオブジェクトを使用して、戻り値およびリターンパラメータを取得する以外に、帰りのデータラインを収集して使用することもできる.
  • は、Data Readerオブジェクトを使用して、これらの行を巡回し、リターン値とリターンパラメータを収集する.
  • は、結果の最初の行の値と戻り値とを、ExecuteScarr方法を使用して返します.これは重合関数に特に有用である.
  • ExecuteNonQuery方法を使用してパラメータと値だけを返します.戻る行はすべて破棄されます.これは操作クエリの実行に特に有用である.
  • 本論文では、次の3つの方法を示し、使用します.
    Sql Commandと
    OleDbCommandという二つのオブジェクトです.あなたが使用しているホストが提供するプログラムに対応するコードのみをコピーすることを確認します.どのホストがプログラムを提供するべきかが不明な場合は、以下のマイクロソフトDeveloper Networkサイトにアクセスしてください.
    NETデータ提供プログラム
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguded/html/cpconadonetproviders.asp
    (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguded/html/cpconadonetproviders.asp)
    本明細書の各例において、これらのパラメータは追加される.
    Commandオブジェクトの
    Parameeters集合中です.使用
    Sql Commandオブジェクトの場合、パラメータを任意の特定の順序で追加する必要はありませんが、パラメータ名が正しいことを保証してください.使用
    OleDbCommandオブジェクトの場合は、正しい順にパラメータを追加する必要がありますが、名称に従ってパラメータを使用することはできません.
    トップに戻る
    Data Readerを使って行とパラメータを返します.
    //
    loadtoCNode(2、'summary')
    //使えます
    DataReaderオブジェクトはリードオンリーの前だけのデータストリームを返します.
    DataReaderに含まれる情報は、1つの記憶プロセスから来ることができる.この例では
    DataReaderオブジェクトは、入力および出力パラメータを伴う格納プロセスを実行し、その後、記録を巡回して戻りパラメータを確認します.
  • は、Microsoft SQL Serverを実行するサーバ上で次のような格納プロセスを作成する.
    
    Create Procedure TestProcedure
    (
      @au_idIN varchar (11),
      @numTitlesOUT Integer OUTPUT
    )
    AS 
    
    select A.au_fname, A.au_lname, T.title 
    from authors as A join titleauthor as TA on
    A.au_id=TA.au_id
    join titles as T
    on T.title_id=TA.title_id
    where A.au_id=@au_idIN
    set @numTitlesOUT = @@Rowcount
    return (5) 
                                            
    
  • 新しいVisual C〓NET Windowsアプリケーションプロジェクトを作成します.
  • は、SystemとSystem.Dataの名前空間に対してusing文を使用しており、後のコードにはこれらの名前空間における声明を限定する必要がない.このコードをフォームコードモジュールの上部に追加します.あなたが選択した提供プログラムに対応するコードのみをコピーすることを確認してください.SQLクライアント
    
    using System.Data.SqlClient;
                                            
    
    OLPE DBデータ提供プログラム
    
    using System.Data.OleDb;
                                            
    
  • 次のコードでprvate Form_を置換します.ロードイベント中のコード:SQLクライアント
    
    SqlConnection PubsConn = new SqlConnection 
    ("Data Source=server;integrated " + 
    "Security=sspi;initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
    ("TestProcedure", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
      ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    SqlParameter NumTitles = testCMD.Parameters.Add 
       ("@numtitlesout", SqlDbType.VarChar, 11);
    NumTitles.Direction = ParameterDirection.Output ;
            
    IdIn.Value = "213-46-8915";
    PubsConn.Open();
    
    SqlDataReader myReader = testCMD.ExecuteReader();
    Console.WriteLine ("Book Titles for this Author:");
    while (myReader.Read()) 
       {
         Console.WriteLine ("{0}", myReader.GetString (2));
       };
    myReader.Close() ;
    Console.WriteLine("Number of Rows: " + NumTitles.Value );
    Console.WriteLine("Return Value: " + RetVal.Value);
                                            
    
    OLPE DBデータ提供プログラム
    
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    OleDbParameter NumTitles = testCMD.Parameters.Add 
       ("@numtitlesout", OleDbType.VarChar, 11);
    NumTitles.Direction = ParameterDirection.Output;
            
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    OleDbDataReader myReader = testCMD.ExecuteReader();
    Console.WriteLine ("Book Titles for this Author:");
    while (myReader.Read()) 
       {
         Console.WriteLine ("{0}", myReader.GetString (2));
       };
    myReader.Close() ;
    Console.WriteLine("Number of Rows: " + NumTitles.Value );
    Console.WriteLine("Return Value: " + RetVal.Value);
                                            
    
  • は、SQL Serverを実行するコンピュータを指すように、Connectionオブジェクトの接続文字列を修正する.
  • は上記のコードを実行します.なお、DataReaderは記録を検索してパラメータ値を返します.Data Readerオブジェクトのリード方法は、ループバックされた記録を使用することができます.「出力」画面は、2冊の本のタイトル、戻り値5と出力パラメータを表示します.記録の数(2)が含まれています.コードのDataReaderをオフにしないとパラメータ値が見えません.また、Data Readerがオフにされている場合、リターンパラメータを見るために全ての記録を遍歴する必要はないことに注意してください.
  • トップに戻る
    Commandオブジェクトを使うExecuteScarr方法
    //
    loadtoCNode(2、'summary')
    //使える
    Commandオブジェクトの
    ExecuteScarrメソッドでパラメータ値を検索します.また、
    ExecuteScarrは、記憶プロセスの第1行の第1列を返す.これは,次の例において,重合関数に特に有用である.
  • は、SQL Serverを実行するサーバ上で次のような格納プロセスを作成する.
    
    Create Procedure TestProcedure2
    (
      @au_idIN varchar (11)
    )
    As
    /* set nocount on */ 
    select count (T.title) 
    from authors as A join titleauthor as TA on
    A.au_id=TA.au_id
    join titles as T
    on T.title_id=TA.title_id
    where A.au_id=@au_idIN
    Return(5)
                                            
    
  • 新しいVisual C〓NET Windowsアプリケーションプロジェクトを作成します.
  • は、SystemとSystem.Dataの名前空間に対してusing文を使用しており、後のコードにはこれらの名前空間における声明を限定する必要がない.このコードをフォームコードモジュールの上部に追加します.あなたが選択した提供プログラムに対応するコードのみをコピーすることを確認してください.SQLクライアント
    
    using System.Data.SqlClient;
                                            
    
    OLPE DBデータ提供プログラム
    
    using System.Data.OleDb;
                                            
    
  • 次のコードをForm_に追加します.ロードイベント:SQLクライアント
    
    string strCount;
    SqlConnection PubsConn = new SqlConnection 
       ("Data Source=server;integrated " + 
       "Security=sspi;initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
       ("TestProcedure2", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
            
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    strCount =testCMD.ExecuteScalar ().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strCount );
    Console.WriteLine("Return Value: " + RetVal.Value);
                                            
    
    OLPE DBデータ提供プログラム
    
    string strCount;
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure2", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);
    RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    strCount = testCMD.ExecuteScalar().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strCount);
    Console.WriteLine("Return Value: " + RetVal.Value);
                                            
    
  • は、SQL Serverを実行するコンピュータを指すように、Connectionオブジェクトの接続文字列を修正する.
  • は上記のコードを実行します.CommandオブジェクトのExecuteScarr方法はパラメータを返します.また、ExecuteScarrは、戻ってくる行のセットの最初の行の列の値を返します.したがって、intCountの値は、プロセスを格納するcount関数の結果である.
  • トップに戻る
    Commandオブジェクトを使うExecute NonQuery方法
    //
    loadtoCNode(2、'summary')
    //この例で使用します
    クエリーを実行してパラメータ値を返します.
    Execute NonQueryはまた、このクエリを実行した後に影響を受けるレコード数を返します.しかし、
    Execute NonQueryは、格納プロセスから任意の行または列に戻りません.
    変更された行数を知るだけであれば、INSERT、UPATEまたはDELETE文を使用する場合、
    Execute NonQuery方法は特に有用です.保存中にSELECT文だけを使うと、照会は任意の行に影響しないので、-1を受け取ります.
  • は、SQL Serverを実行するコンピュータ上で次の格納プロセスを作成する.
    
    Create Procedure TestProcedure3
    (
      @au_idIN varchar (11),
      @au_fnam varchar (30)
    )
    
    As
    /* set nocount on */ 
    Update authors set au_fname = @au_fnam
    where au_id = @au_idin  
    return (5)
                                            
    
  • 新しいVisual C〓NET Windowsアプリケーションプロジェクトを作成します.
  • は、SystemとSystem.Dataの名前空間に対してusing文を使用しており、後のコードにはこれらの名前空間における声明を限定する必要がない.このコードをフォームコードモジュールの上部に追加します.あなたが選択した提供プログラムに対応するコードのみをコピーすることを確認してください.SQLクライアント
    
    using System.Data.SqlClient;
                                            
    
    OLPE DBデータ提供プログラム
    
    using System.Data.OleDb;
                                            
    
  • 以下のコードでForm 1コードモジュールのprvate Form 1_を置換します.ロードイベントの後のコード:SQLクライアント
    
    string strRowAffect;
    SqlConnection PubsConn = new SqlConnection 
       ("Data Source=server;integrated Security=sspi;" + 
       "initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
       ("TestProcedure3", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    SqlParameter FnameIn = testCMD.Parameters.Add 
       ("@au_fnam", SqlDbType.VarChar, 30);
    FnameIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    FnameIn.Value = "Marjorie";
    
    PubsConn.Open();
    
    strRowAffect =testCMD.ExecuteNonQuery ().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strRowAffect );
    Console.WriteLine("Return Value: " + RetVal.Value);
                                            
    
    OLPE DBデータ提供プログラム
    
    int intRowAffected;
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure3", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);
    RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    OleDbParameter FnameIn = testCMD.Parameters.Add
       ("@au_fname", OleDbType.VarChar, 30);
    FnameIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    FnameIn.Value = "Marjorie";
    
    PubsConn.Open();
    intRowAffected = testCMD.ExecuteNonQuery();
    
    Console.WriteLine("Number of Rows affected: " + intRowAffected);
    Console.WriteLine(RetVal.Value);
                                            
    
  • は、SQL Serverを実行するコンピュータを指すように、Connectionオブジェクトの接続文字列を修正する.
  • は上記のコードを実行します.「出力」画面は、影響を受ける行数とリターンパラメータの値を表示します.
  • トップに戻る
    参照
    他の情報については、次のMSDNサイトにアクセスしてください.http://msdn.microsoft.com/library/defa...
    //
    loadtoCNode(1、'references')
    //
    他の情報については、以下のMSDNサイトにアクセスしてください.
    NET Fraamewark類庫概要
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgguide/html/cpconthenetfram ebork classigrary.asp
    (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgguide/html/cpconthenetfram ebork classigrary.asp)
    Data Readerを使ってデータを検索する
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguded/html/cpcontheadonetdatareder.asp
    (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcontheadonetdatareder.asp)