.Net里怎么得到存储过程的返回值

除了输入和输出参数之外,存储过程还可以具有返回值。以下示例阐释   ADO.NET   如何发送和接收输入参数、输出参数和返回值,其中采用了这样一种常见方案:将新记录插入其中主键列是自动编号字段的表。该示例使用输出参数来返回自动编号字段的   @@Identity,而   DataAdapter   则将其绑定到   DataTable   的列,使   DataSet   反映所生成的主键值。  
  该示例使用以下存储过程将新目录插入   Northwind   Categories   表(该表将   CategoryName   列中的值当作输入参数),从   @@Identity   中以输出参数的形式返回自动编号字段   CategoryID   的值,并提供所影响行数的返回值。  
  CREATE   PROCEDURE   InsertCategory  
      @CategoryName   nchar(15),  
      @Identity   int   OUT  
  AS  
  INSERT   INTO   Categories   (CategoryName)   VALUES(@CategoryName)  
  SET   @Identity   =   @@Identity  
  RETURN   @@ROWCOUNT  
  以下示例将   InsertCategory   存储过程用作   DataAdapter   的   InsertCommand   的数据源。通过将   CategoryID   列指定为   @Identity   输出参数的   SourceColumn,当调用   DataAdapter   的   Update   方法时,所生成的自动编号值将在该记录插入数据库后在   DataSet   中得到反映。  
  对于   OleDbDataAdapter,必须在指定其他参数之前先指定   ParameterDirection   为   ReturnValue   的参数。  
  SqlClient  
  [Visual   Basic]  
  Dim   nwindConn   As   SqlConnection   =   New   SqlConnection("Data   Source=localhost;Integrated   Security=SSPI;"   &   _  
                                                                                                              "Initial   Catalog=northwind")  
   
  Dim   catDA   As   SqlDataAdapter   =   New   SqlDataAdapter("SELECT   CategoryID,   CategoryName   FROM   Categories",   nwindConn)  
   
  catDA.InsertCommand   =   New   SqlCommand("InsertCategory"   ,   nwindConn)  
  catDA.InsertCommand.CommandType   =   CommandType.StoredProcedure  
   
  Dim   myParm   As   SqlParameter   =   catDA.InsertCommand.Parameters.Add("@RowCount",   SqlDbType.Int)  
  myParm.Direction   =   ParameterDirection.ReturnValue  
   
  catDA.InsertCommand.Parameters.Add("@CategoryName",   SqlDbType.NChar,   15,   "CategoryName")  
   
  myParm   =   catDA.InsertCommand.Parameters.Add("@Identity",   SqlDbType.Int,   0,   "CategoryID")  
  myParm.Direction   =   ParameterDirection.Output  
   
  Dim   catDS   As   DataSet   =   New   DataSet()  
  catDA.Fill(catDS,   "Categories")  
   
  Dim   newRow   As   DataRow   =   catDS.Tables("Categories").NewRow()  
  newRow("CategoryName")   =   "New   Category"  
  catDS.Tables("Categories").Rows.Add(newRow)  
   
  catDA.Update(catDS,   "Categories")  
   
  Dim   rowCount   As   Int32   =   CInt(catDA.InsertCommand.Parameters("@RowCount").Value)  
  [C#]  
  SqlConnection   nwindConn   =   new   SqlConnection("Data   Source=localhost;Integrated   Security=SSPI;"   +  
                                                                                          "Initial   Catalog=northwind");  
   
  SqlDataAdapter   catDA   =   new   SqlDataAdapter("SELECT   CategoryID,   CategoryName   FROM   Categories",   nwindConn);  
   
  catDA.InsertCommand   =   new   SqlCommand("InsertCategory",   nwindConn);  
  catDA.InsertCommand.CommandType   =   CommandType.StoredProcedure;  
   
  SqlParameter   myParm   =   catDA.InsertCommand.Parameters.Add("@RowCount",   SqlDbType.Int);  
  myParm.Direction   =   ParameterDirection.ReturnValue;  
   
  catDA.InsertCommand.Parameters.Add("@CategoryName",   SqlDbType.NChar,   15,   "CategoryName");  
   
  myParm   =   catDA.InsertCommand.Parameters.Add("@Identity",   SqlDbType.Int,   0,   "CategoryID");  
  myParm.Direction   =   ParameterDirection.Output;  
   
  DataSet   catDS   =   new   DataSet();  
  catDA.Fill(catDS,   "Categories");  
   
  DataRow   newRow   =   catDS.Tables["Categories"].NewRow();  
  newRow["CategoryName"]   =   "New   Category";  
  catDS.Tables["Categories"].Rows.Add(newRow);  
   
  catDA.Update(catDS,   "Categories");  
   
  Int32   rowCount   =   (Int32)catDA.InsertCommand.Parameters["@RowCount"].Value;  
  OleDb  
  [Visual   Basic]  
  Dim   nwindConn         As   OleDbConnection   =   New   OleDbConnection("Provider=SQLOLEDB;Data   Source=localhost;"   &   _  
                                                                                                                      "Integrated   Security=SSPI;Initial   Catalog=northwind")  
   
  Dim   catDA   As   OleDbDataAdapter   =   New   OleDbDataAdapter("SELECT   CategoryID,   CategoryName   FROM   Categories",   _  
                                                                                                            nwindConn)  
   
  catDA.InsertCommand   =   New   OleDbCommand("InsertCategory"   ,   nwindConn)  
  catDA.InsertCommand.CommandType   =   CommandType.StoredProcedure  
   
  Dim   myParm   As   OleDbParameter   =   catDA.InsertCommand.Parameters.Add("@RowCount",   OleDbType.Integer)  
  myParm.Direction   =   ParameterDirection.ReturnValue  
   
  catDA.InsertCommand.Parameters.Add("@CategoryName",   OleDbType.Char,   15,   "CategoryName")  
   
  myParm   =   catDA.InsertCommand.Parameters.Add("@Identity",   OleDbType.Integer,   0,   "CategoryID")  
  myParm.Direction   =   ParameterDirection.Output  
   
  Dim   catDS   As   DataSet   =   New   DataSet()  
  catDA.Fill(catDS,   "Categories")  
   
  Dim   newRow   As   DataRow   =   catDS.Tables("Categories").NewRow()  
  newRow("CategoryName")   =   "New   Category"  
  catDS.Tables("Categories").Rows.Add(newRow)  
   
  catDA.Update(catDS,   "Categories")  
   
  Dim   rowCount   As   Int32   =   CInt(catDA.InsertCommand.Parameters("@RowCount").Value)  
  [C#]  
  OleDbConnection   nwindConn   =   new   OleDbConnection("Provider=SQLOLEDB;Data   Source=localhost;"   +    
                                                                                                  "Integrated   Security=SSPI;Initial   Catalog=northwind");  
   
  OleDbDataAdapter   catDA   =   new   OleDbDataAdapter("SELECT   CategoryID,   CategoryName   FROM   Categories",   nwindConn);  
   
  catDA.InsertCommand   =   new   OleDbCommand("InsertCategory",   nwindConn);  
  catDA.InsertCommand.CommandType   =   CommandType.StoredProcedure;  
   
  OleDbParameter   myParm   =   catDA.InsertCommand.Parameters.Add("@RowCount",   OleDbType.Integer);  
  myParm.Direction   =   ParameterDirection.ReturnValue;  
   
  catDA.InsertCommand.Parameters.Add("@CategoryName",   OleDbType.Char,   15,   "CategoryName");  
   
  myParm   =   catDA.InsertCommand.Parameters.Add("@Identity",   OleDbType.Integer,   0,   "CategoryID");  
  myParm.Direction   =   ParameterDirection.Output;  
   
  DataSet   catDS   =   new   DataSet();  
  catDA.Fill(catDS,   "Categories");  
   
  DataRow   newRow   =   catDS.Tables["Categories"].NewRow();  
  newRow["CategoryName"]   =   "New   Category";  
  catDS.Tables["Categories"].Rows.Add(newRow);  
   
  catDA.Update(catDS,   "Categories");  
   
  Int32   rowCount   =   (Int32)catDA.InsertCommand.Parameters["@RowCount"].Value;

.NET中如何调用存储过程  
   
  http://www.5d.cn/Tutorial/webdevelop/asp/200412/1960.html

posted on 2007-02-04 12:04  念时  阅读(1364)  评论(0编辑  收藏  举报

细节决定成败!态度决定一切!