免费邮箱 |加入收藏 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > .NET专区 > ASP.NET应用

ADO.NET在开发中的部分使用方法和技巧

时间:2011-05-21 10:45:17  来源:站内  作者:潘春会

// @ProductName nvarchar(40) OUTPUT
// @UnitPrice money OUTPUT
// Must explicitly set the direction of output parameters SqlParameter paramProdID = cmd.Parameters.Add( "@ProductID", ProductID );
paramProdID.Direction = ParameterDirection.Input; SqlParameter paramProdName = cmd.Parameters.Add( "@ProductName", SqlDbType.VarChar, 40 );
paramProdName.Direction = ParameterDirection.Output; SqlParameter paramUnitPrice = cmd.Parameters.Add( "@UnitPrice", SqlDbType.Money );
paramUnitPrice.Direction = ParameterDirection.Output; conn.Open();
// Use ExecuteNonQuery to run the command.
// Although no rows are returned any mapped output parameters
// (and potentially return values) are populated cmd.ExecuteNonQuery( );
// Return output parameters from stored proc ProductName = paramProdName.Value.ToString();
UnitPrice = (decimal)paramUnitPrice.Value; } }
使用存储过程输出参数来检索单个行
 

1.创建一个 SqlCommand 对象并将其与一个 SqlConnection对象相关联。

2.通过调用 SqlCommand 的 Parameters集合的 Add方法来设置存储过程参数。默认情况下,参数都被假设为输入参数,因此必须显式设置任何输出参数的方向。

注一种良好的习惯做法是显式设置所有参数(包括输入参数)的方向。

3.打开连接。

4.调用 SqlCommand 对象的 ExecuteNonQuery方法。这将填充输出参数(并可能填充返回值)。

5.通过使用 Value 属性,从适当的 SqlParameter对象中检索输出参数。

6.关闭连接。

 

上述代码片段调用了以下存储过程。

CREATE PROCEDURE DATGetProductDetailsSPOutput
@ProductID int,
@ProductName nvarchar(40) OUTPUT,
@UnitPrice money OUTPUT AS SELECT @ProductName = ProductName,
@UnitPrice = UnitPrice FROM Products WHERE ProductID = @ProductID GO
如何使用 SqlDataReader 来检索单个行
可以使用 SqlDataReader对象来检索单个行,尤其是可以从返回的数据流中检索需要的列值。以下代码片段对此进行了说明。

void GetProductDetailsUsingReader( int ProductID, out string ProductName, out decimal UnitPrice )
{ using( SqlConnection conn = new SqlConnection( "server=(local);
Integrated Security=SSPI;database=Northwind") ) {
// Set up the command object used to execute the stored proc SqlCommand cmd = new SqlCommand( "DATGetProductDetailsReader", conn );
cmd.CommandType = CommandType.StoredProcedure;
// Establish stored proc parameters.
// @ProductID int INPUT SqlParameter paramProdID = cmd.Parameters.Add( "@ProductID", ProductID );
paramProdID.Direction = ParameterDirection.Input;
conn.Open();
using( SqlDataReader reader = cmd.ExecuteReader() ) { if( reader.Read() )
// Advance to the one and only row {
// Return output parameters from returned data stream ProductName = reader.GetString(0);
UnitPrice = reader.GetDecimal(1);
} } } }
使用 SqlDataReader 对象来返回单个行
 

1.建立 SqlCommand 对象。

2.打开连接。

3.调用 SqlDataReader 对象的 ExecuteReader方法。

4.通过 SqlDataReader 对象的类型化访问器方法(在这里,为 GetString和 GetDecimal)来检索输出参数。

 

上述代码片段调用了以下存储过程。

CREATE PROCEDURE DATGetProductDetailsReader
@ProductID int AS SELECT ProductName, UnitPrice FROM Products WHERE ProductID =
@ProductID GO
如何使用 ExecuteScalar 来检索单个项
ExecuteScalar方法专门适用于仅返回单个值的查询。如果查询返回多个列和/或行,ExecuteScalar将只返回第一行的第一列。

以下代码说明了如何查找与特定产品 ID 相对应的产品名称:

void GetProductNameExecuteScalar( int ProductID, out string ProductName )
{ using( SqlConnection conn = new SqlConnection( "server=(local);Integrated Security=SSPI;database=northwind") )
{ SqlCommand cmd = new SqlCommand("LookupProductNameScalar", conn );
cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@ProductID", ProductID );
conn.Open();
ProductName = (string)cmd.ExecuteScalar();
} }
使用 ExecuteScalar 来检索单个项
 

1.建立一个 SqlCommand 对象来调用存储过程。

2.打开连接。

3.调用 ExecuteScalar 方法。注意,该方法返回一个对象类型。它包含检索到的第一列的值,并且必须转化为适当的类型。

4.关闭连接。

 

上述代码使用了以下存储过程:

CREATE PROCEDURE LookupProductNameScalar
@ProductID int AS SELECT TOP 1 ProductName FROM Products WHERE ProductID =
@ProductID GO
如何使用存储过程输出或返回参数来检索单个项
可以使用存储过程输出或返回参数来查找单个值。以下代码阐明了输出参数的用法:

void GetProductNameUsingSPOutput( int ProductID, out string ProductName )
{ using( SqlConnection conn = new SqlConnection( "server=(local);Integrated Security=SSPI;database=northwind") )

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
如何找出DHCP地址池里未使用的IP地址
如何找出DHCP地址池里
国内常用的DNS列表
国内常用的DNS列表
Linux邮件服务器软件比较
Linux邮件服务器软件比
学用纯CSS打造可折叠树状菜单
学用纯CSS打造可折叠树
相关文章
栏目更新
栏目热门