具有 OUTPUT 参数的存储过程在应用程序代码与 SQL 中始终返回 1



In SQL Server Management Studio:

  1. 右键单击该过程
  2. 执行
  3. 不要输入输出参数的值
  4. 输入另一个字符串参数的值
  5. 返回正确的值(例如: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

在应用程序代码中:

  1. 运行以下代码
  2. 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;

最新更新