[英]Stored procedure with OUTPUT Parameter Always Returns 1 in Application Code vs SQL
In SQL Server Management Studio: 在SQL Server Management Studio中:
Calling code: 调用代码:
DECLARE @return_value int,
@CustomerID bigint
EXEC @return_value = [dbo].[InsertCustomer]
@CustomerID = @CustomerID OUTPUT,
@Name = N'CustomerName'
SELECT @CustomerID as N'@CustomerID'
SELECT 'Return Value' = @return_value
In application code: 在应用程序代码中:
CustomerID
is always 1 CustomerID
的返回值始终为1 Code: 码:
ObjectParameter ob = new ObjectParameter("CustomerID", typeof(long));
var CustomerID = db.InsertCustomer(ob, "CustomerName");
I attempted to change the new ObjectParameter(,)
second parameter by passing a type and often object by value (ex: 0, 1 etc) but with no avail. 我试图通过传递类型(通常是按值(例如:0、1等),但无济于事)来更改新的
ObjectParameter(,)
第二个参数。
What could have went wrong here? 这里可能出了什么问题?
Update : 更新 :
This is how the Entity Framework procedure code look like: 实体框架过程代码如下所示:
public virtual int InsertCustomer(ObjectParameter customerID, string name)
{
var nameParameter = name != null ?
new ObjectParameter("Name", name) :
new ObjectParameter("Name", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("InsertCustomer", customerID, nameParameter);
}
Straight ADO : 直ADO :
Please refer to this link. 请参考此链接。 .
。 You need to specify your output parameter in the proc and you need to specify it in the calling code.
您需要在proc中指定输出参数,并且需要在调用代码中指定输出参数。
SqlParameter outParam = new SqlParameter("CustomerID", 0);
using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["StringName"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("InsertCustomer", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = CustomerName;
cmd.Parameters.Add(outParam.ParameterName, SqlDbType.BigInt).Direction = ParameterDirection.Output;
con.Open();
var CustomerID = Convert.ToInt64(cmd.Parameters["CustomerID"].Value);
}
}
Entity Framework : 实体框架 :
ObjectParameter ob = new ObjectParameter("CustomerID", 0);
// Wrong
var CustomerID = db.InsertCustomer(ob, "CustomerName");
// Right
db.InsertCustomer(ob, "CustomerName");
var CustomerID = (long)ob.Value;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.