Sql存储过程示例:
    ALTER PROCEDURE dbo.AddCustomer
    (
        
@Name nvarchar(30),
        
@Address nvarchar(60),
        
@City nvarchar(15),
        
@Country nvarchar(15),
        
@PostalCode nvarchar(10)
    ) 
    
AS
        
        
Insert Into
            Customers (Name, Address, City, Country, PostalCode)
        
values
            (
@Name@Address@City@Country@PostalCode)
            
        
Select *
            
From Customers
        
Where 
            CustomerID 
= @@IDENTITY
        
        
RETURN

C#代码示例:
string sName = "黄琴";
string sAddress = "IBM ThinkPad 制造";
string sCity = "深圳";
string sCountry = "中国";
string sPostalCode = "518000";

Database db 
= DatabaseFactory.CreateDatabase("CS_QuickStarts");
object[] oParaVals = new object[]{sName, sAddress, sCity, sCountry, sPostalCode}// 存储过程的参数值
using (IDataReader dr = db.ExecuteReader("AddCustomer", oParaVals))
{
    
while (dr.Read())
    
{
        Response.Write(
"<br />主键:" + dr["CustomerID"]);
        Response.Write(
"<br />姓名:" + dr["Name"]);
        Response.Write(
"<br />地址:" + dr["Address"]);
        Response.Write(
"<br />城市:" + dr["City"]);
        Response.Write(
"<br />国家:" + dr["Country"]);
        Response.Write(
"<br />邮编:" + dr["PostalCode"]);
    }

}


Response.End();


运行结果:
    
    
/* -------------------- 运行结果 ------------------------

    主键:5
    姓名:黄琴
    地址:IBM ThinkPad 制造
    城市:深圳
    国家:中国
    邮编:518000

    -------------------------------------------------------- 
*/



 笔记:
 1、调用 ExecuteReader 的同时,也会执行 Insert 语句。
 2、使用该方法,很方便的调用存储过程。缺点是不能获取 ReturnValue 值。
public IDataReader ExecuteReader (
    
string storedProcedureName,
    
params Object[] parameterValues
)
posted @ 2006-09-08 17:30 jeky 阅读(466) 评论(0) 编辑
存储过程示例:
    ALTER PROCEDURE dbo.GetSumValue
    (
        
@IX int,
        
@IY int,
        
@IZ int
    )
    
AS
        
Return (@IX + @IY + @IZ);

C#代码示例:
        Database db = DatabaseFactory.CreateDatabase("CS_QuickStarts"); // 创建一个 Database 对象
        DbCommand cmd = db.GetStoredProcCommand("GetSumValue"); // 创建一个 DbCommand 对象
        db.DiscoverParameters(cmd); // 显示参数信息
        DbParameterCollection paras = cmd.Parameters; // 获取参数集合前一定要先调用 DiscoverParameters 方法

        
foreach (DbParameter para in paras)
        
{
            Response.Write(
"<br />名称:" + para.ParameterName);
            Response.Write(
"<br />类型:" + para.DbType);
            Response.Write(
"<br />方向:" + para.Direction);
            Response.Write(
"<hr />");
        }


        Response.End();

运行结果:
    /* ---------- 运行结果 ----
    名称:@RETURN_VALUE
    类型:Int32
    方向:ReturnValue
    --------------------------------------------------------------------------------

    名称:@IX
    类型:Int32
    方向:Input
    --------------------------------------------------------------------------------

    名称:@IY
    类型:Int32
    方向:Input
    --------------------------------------------------------------------------------

    名称:@IZ
    类型:Int32
    方向:Input
    
*/



参考文档:SHY520的《Enterprise Library 2.0 -- Data Access Application Block (补充) 》

SHY520的这篇日志是讲述存储过程参数调用方便的一种方法,写得很不错,我也学到了很多知识。

不过,我在查看《Enterprise Library January 2006 文档》的时候,发现 Database 中有一个现成的方法可以直接使用:
public virtual int ExecuteNonQuery (
    
string storedProcedureName,
    
params Object[] parameterValues
)

稍后,我会继续测试这个方法的。
posted @ 2006-09-08 15:18 jeky 阅读(472) 评论(0) 编辑
  最近在学习Enterprise Library 2.0,在博客园看到了Terry和SHY520的文章,学到了很多知识。很感谢他们能把自己所学的知识分享给大家。以后,我也要养成一个写日志的好习惯,每天进步一点!

  
    ALTER PROCEDURE dbo.GetSumValue
    (
        
@IX int,
        
@IY int,
        
@IZ int
    )
    
AS
        
Return (@IX + @IY + @IZ);

        Database db = DatabaseFactory.CreateDatabase("CS_QuickStarts");
        DbCommand cmd 
= db.GetStoredProcCommand("GetSumValue");

        db.AddInParameter(cmd, 
"IX", DbType.Int32, 20);
        db.AddInParameter(cmd, 
"IY", DbType.Int32, 10);
        db.AddInParameter(cmd, 
"IZ", DbType.Int32, 25); // 用于普通添加类型的参数,参数名称不需要加“@”前缀
        db.AddParameter(cmd, "@ReturnVal", DbType.String, ParameterDirection.ReturnValue, "", DataRowVersion.Current, null); // 用于返回值的参数名称,需要加@前缀

        db.ExecuteNonQuery(cmd); 
// 必须使用 ExecuteNonQuery 方法才可以得到 ReturnValue 值,不能使用 ExecuteReader 等
        int iReturnVal = Convert.ToInt32(cmd.Parameters["@ReturnVal"].Value);

        Response.Write(
"<br />返回值:" + iReturnVal);

        Response.End();


  感谢SHY520的日志《使用Data Access Application Block 得到存储过程的返回值》
posted @ 2006-09-08 13:17 jeky 阅读(470) 评论(0) 编辑