In SQL Server Management Studio:
- 右键单击该过程
- 执行
- 不要输入输出参数的值
- 输入另一个字符串参数的值
- 返回正确的值(例如:12+(
电话代码:
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
在应用程序代码中:
- 运行以下代码
CustomerID
的返回值始终为 1
法典:
ObjectParameter ob = new ObjectParameter("CustomerID", typeof(long));
var CustomerID = db.InsertCustomer(ob, "CustomerName");
我试图通过传递类型并经常按值(例如:0、1 等(传递对象来更改新的ObjectParameter(,)
第二个参数,但无济于事。
这里可能出了什么问题?
更新:
实体框架过程代码如下所示:
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:
请参考此链接.. 您需要在 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);
}
}
实体框架:
请参阅此链接
ObjectParameter ob = new ObjectParameter("CustomerID", 0);
// Wrong
var CustomerID = db.InsertCustomer(ob, "CustomerName");
// Right
db.InsertCustomer(ob, "CustomerName");
var CustomerID = (long)ob.Value;