从 DbCommand 对象转换为 OracleCommand 对象
我继承了 ASP.NET (C#) 应用程序中的一个函数,其中作者使用了 Microsoft.Practices.EnterpriseLibrary.Data 库
,但有人要求我更改它,以便它使用 System.Data.OracleClient
。该函数使用数据库中的存储过程。 itemName
和 openDate
是函数接受的字符串参数。PKG_AUCTION_ITEMS.IsAuctionItem
是存储过程函数名称。
这是我收到的代码:
string result = String.Empty;
Database db = DatabaseFactory.CreateDatabase("OraData");
using (DbCommand cmdDB = db.GetStoredProcCommand("PKG_AUCTION_ITEMS.IsAuctionItem"))
{
db.AddInParameter(cmdDB, "vItemName", DbType.String, itemName);
db.AddInParameter(cmdDB, "vOpenDate", DbType.String, openDate);
db.AddParameter(cmdDB, "ret", DbType.String, 2, ParameterDirection.ReturnValue, false, 0, 0, null, DataRowVersion.Current, null);
db.ExecuteNonQuery(cmdDB);
result = cmdDB.Parameters["ret"].Value.ToString();
}
这是我的代码:(connstr
是连接字符串)
string result = String.Empty;
OracleConnection conn = new OracleConnection(connstr);
OracleCommand cmd = new OracleCommand("PKG_AUCTION_ITEMS.IsAuctionItem",conn);
myCmd.CommandType = CommandType.StoredProcedure;
using (myCmd)
{
myCmd.Parameters.AddWithValue("vItemName", itemName);
myCmd.Parameters.AddWithValue("vOpenDate", openDate);
myCmd.Parameters.AddWithValue("ret", ???);
myCmd.ExecuteNonQuery();
result = myCmd.Parameters["ret"].Value.ToString();
}
我不明白 AddInParameter 和 AddParameter 之间的区别是什么,以及这一行的作用:
db.AddParameter(cmdDB, "ret", DbType.String, 2, ParameterDirection.ReturnValue, false, 0, 0, null, DataRowVersion.Current, null);
我在正确的轨道吗?有人可以帮忙吗? 谢谢
I have inherited a function in an ASP.NET (C#) application where the author used the Microsoft.Practices.EnterpriseLibrary.Data library
, but I have been asked to change it so that it uses System.Data.OracleClient
. This function uses a stored procedure form a database. itemName
, and openDate
are string parameters that the function takes in. PKG_AUCTION_ITEMS.IsAuctionItem
is the stored procedure function name.
Here is the code that I received:
string result = String.Empty;
Database db = DatabaseFactory.CreateDatabase("OraData");
using (DbCommand cmdDB = db.GetStoredProcCommand("PKG_AUCTION_ITEMS.IsAuctionItem"))
{
db.AddInParameter(cmdDB, "vItemName", DbType.String, itemName);
db.AddInParameter(cmdDB, "vOpenDate", DbType.String, openDate);
db.AddParameter(cmdDB, "ret", DbType.String, 2, ParameterDirection.ReturnValue, false, 0, 0, null, DataRowVersion.Current, null);
db.ExecuteNonQuery(cmdDB);
result = cmdDB.Parameters["ret"].Value.ToString();
}
Here is my code:(connstr
is the connection string)
string result = String.Empty;
OracleConnection conn = new OracleConnection(connstr);
OracleCommand cmd = new OracleCommand("PKG_AUCTION_ITEMS.IsAuctionItem",conn);
myCmd.CommandType = CommandType.StoredProcedure;
using (myCmd)
{
myCmd.Parameters.AddWithValue("vItemName", itemName);
myCmd.Parameters.AddWithValue("vOpenDate", openDate);
myCmd.Parameters.AddWithValue("ret", ???);
myCmd.ExecuteNonQuery();
result = myCmd.Parameters["ret"].Value.ToString();
}
I do not understand what the difference between AddInParameter and AddParameter is, and what this line does:
db.AddParameter(cmdDB, "ret", DbType.String, 2, ParameterDirection.ReturnValue, false, 0, 0, null, DataRowVersion.Current, null);
Am I on the right track? Can anyone please help?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在这种情况下,db.AddParameter 添加一个输出参数。您需要让数据库客户端库知道您正在寻找从存储过程调用返回的返回值。因此调用 AddParameter。 db.AddInParameter 添加一个参数,该参数只是一个内参数。这是使用 ParameterDirection.Input 的 db.AddParameter 的快捷方式。请参阅http://blogs.x2line.com/al/archive /2006/03/25/1579.aspx 有关 AddInParameter 与 AddParameter 的讨论。
类似地,使用 OracleClient,AddWithValue 就像 AddInParameter——当您已经知道值时用于输入参数的快捷方式。由于根据定义,返回值是输出参数,因此您不能使用 AddWithValue。您需要改用Parameters.Add()。
现在,回到您的主要问题:使用 OracleClient 的等效代码是什么。是这样的:
db.AddParameter adds an output parameter in this case. You need to let the db client library know that you're looking to get the return value back from the sproc call. Hence the call to AddParameter. db.AddInParameter adds a parameter which is only an in-parameter. In the It's a shortcut for db.AddParameter using ParameterDirection.Input. See http://blogs.x2line.com/al/archive/2006/03/25/1579.aspx for a discussion of AddInParameter vs. AddParameter.
Similarly, using OracleClient, AddWithValue is like AddInParameter-- a shortcut to use for input params when you already know the value. Since the return value is, by definition, an output parameter, you can't use AddWithValue. You need to use Parameters.Add() instead.
Now, back to your main question: what's the equivalent code using OracleClient. It's something like this:
实际上,我们更明确地进行参数配置,如下所示。
您会看到,我们为返回的参数显式分配了一个属性方向。第一个获取变量“id”的值,并且是传递给存储过程的参数。
第二个参数由存储过程返回,因此没有为该参数值分配任何值,并且方向设置为
"System.Data.ParameterDirection.Output"
We actually do the configuration of the parameters more explicitly, something like this
You see, there is a property direction which we explicitly assign for the parameter that is being returned. The first gets the value of a variable "id" and is a parameter that gets passed TO the stored procedure.
The 2nd one is being returned by the stored procedure, therefore no value is assigned to that parameter value and the direction is set to
"System.Data.ParameterDirection.Output"