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

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

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

{ SqlCommand cmd = new SqlCommand("LookupProductNameSPOutput", conn );
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter paramProdID = cmd.Parameters.Add("@ProductID", ProductID );
ParamProdID.Direction = ParameterDirection.Input;
SqlParameter paramPN = cmd.Parameters.Add("@ProductName", SqlDbType.VarChar, 40 );
paramPN.Direction = ParameterDirection.Output; conn.Open();
cmd.ExecuteNonQuery();
ProductName = paramPN.Value.ToString();
} }
使用存储过程输出参数来检索单个值
 

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

2.通过将 SqlParameters 添加到 SqlCommand的 Parameters集合中,设置任何输入参数和单个输出参数。

3.打开连接。

4.调用 SqlCommand 对象的 ExecuteNonQuery方法。

5.关闭连接。

6.通过使用输出 SqlParameter 的 Value属性来检索输出值。

 

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

@ProductID int,
@ProductName nvarchar(40) OUTPUT AS SELECT
@ProductName = ProductName FROM Products WHERE ProductID = @ProductID GO
以下代码阐明了如何使用返回值来指明是否存在特定行。从编码角度来看,这类似于使用存储过程输出参数,不同之处在于必须将 SqlParameter方向显式设置为 ParameterDirection.ReturnValue。

bool CheckProduct( int ProductID )
{ using( SqlConnection conn = new SqlConnection( "server=(local);
Integrated Security=SSPI;database=northwind") )
{ SqlCommand cmd = new SqlCommand("CheckProductSP", conn );
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@ProductID", ProductID );
SqlParameter paramRet = cmd.Parameters.Add("@ProductExists", SqlDbType.Int );
paramRet.Direction = ParameterDirection.ReturnValue; conn.Open(); cmd.ExecuteNonQuery(); }
return (int)paramRet.Value == 1; }
通过使用存储过程返回值来检查是否存在特定行
 

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

2.设置一个输入参数,该参数含有要访问的行的主键值。

3.设置单个返回值参数。将一个 SqlParameter 对象添加到 SqlCommand的 Parameters集合中,并将其方向设置为 ParameterDirection.ReturnValue。

4.打开连接。

5.调用 SqlCommand 对象的 ExecuteNonQuery方法。

6.关闭连接。

7.通过使用返回值 SqlParameter 的 Value属性来检索返回值。

 

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

CREATE PROCEDURE CheckProductSP
@ProductID int AS IF EXISTS( SELECT ProductID FROM Products WHERE ProductID =
@ProductID )
return 1 ELSE return 0 GO
如何使用 SqlDataReader 来检索单个项
可以使用 SqlDataReader对象并通过调用命令对象的 ExecuteReader方法来获取单个输出值。这要求编写稍微多一点的代码,因为必须调用 SqlDataReader Read 方法,然后通过该读取器的访问器方法之一来检索需要的值。以下代码阐明了 SqlDataReader对象的用法。

bool CheckProductWithReader( int ProductID )
{ using( SqlConnection conn = new SqlConnection( "server=(local);
Integrated Security=SSPI;database=northwind") )
{ SqlCommand cmd = new SqlCommand("CheckProductExistsWithCount", conn );
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@ProductID", ProductID );
cmd.Parameters["@ProductID"].Direction = ParameterDirection.Input; conn.Open();
using( SqlDataReader reader = cmd.ExecuteReader( CommandBehavior.SingleResult ) )
{ if( reader.Read() ) { return (reader.GetInt32(0) >0); } return false; } }
上述代码采用了以下存储过程。

CREATE PROCEDURE CheckProductExistsWithCount @ProductID int AS SELECT COUNT(*) FROM Products WHERE ProductID = @ProductID GO
如何编写 ADO.NET 手动事务处理代码
以下代码显示了如何充分利用 SQL Server .NET 数据提供程序所提供的事务处理支持,通过事务来保护资金转帐操作。该操作在同一数据库中的两个帐户之间转移资金。

public void TransferMoney( string toAccount, string fromAccount, decimal amount ) {
using ( SqlConnection conn = new SqlConnection( "server=(local);Integrated Security=SSPI;database=SimpleBank" ) )
{ SqlCommand cmdCredit = new SqlCommand("Credit", conn );
cmdCredit.CommandType = CommandType.StoredProcedure;
cmdCredit.Parameters.Add( new SqlParameter("@AccountNo", toAccount) );
cmdCredit.Parameters.Add( new SqlParameter("@Amount", amount ));
SqlCommand cmdDebit = new SqlCommand("Debit", conn );
cmdDebit.CommandType = CommandType.StoredProcedure; cmdDebit.Parameters.Add( new SqlParameter("@AccountNo", fromAccount) );
cmdDebit.Parameters.Add( new SqlParameter("@Amount", amount ));
conn.Open();
// Start a new transaction using ( SqlTransaction trans = conn.BeginTransaction() ) {
// Associate the two command objects with the same transaction cmdCredit.Transaction = trans;

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