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
)
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
)
稍后,我会继续测试这个方法的。
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 得到存储过程的返回值》。
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) 编辑

