首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >??如何使用企业库6获取存储过程返回值?

??如何使用企业库6获取存储过程返回值?
EN

Stack Overflow用户
提问于 2014-01-12 05:35:09
回答 1查看 1.6K关注 0票数 0
代码语言:javascript
复制
CREATE proc dbo.[usp_UpsertCustomer] 
@CustomerID int, @CustomerName nvarchar(50), @CustomerAddress nvarchar(100),
@CustomerPhone nvarchar(50), @CustomerEmail nvarchar(50)
as
set nocount on
declare @initcount int = (select count(*) from dbo.Customer)
begin
merge dbo.Customer as c
using (select @CustomerID,@CustomerName,@CustomerAddress,@CustomerPhone,@CustomerEmail) as s
-- src data maps to the following fields
              (CustomerID, CustomerName, CustomerAddress, CustomerPhone, CustomerEmail)
on c.CustomerID = s.CustomerID
when matched then --update the record
    update set c.CustomerName = s.CustomerName, c.CustomerAddress = s.CustomerAddress,
               c.CustomerPhone = s.CustomerPhone, c.CustomerEmail = s.CustomerEmail
when not matched then --insert the new record
    insert (CustomerName,CustomerAddress,CustomerPhone,CustomerEmail)
    values (s.CustomerName,s.CustomerAddress,s.CustomerPhone,s.CustomerEmail);

-- return ID of the new record if created
if @initcount < (select count(*) from dbo.Customer)
    return (select max(CustomerID) from dbo.Customer)
else
    return 0
end

- c#代码

代码语言:javascript
复制
public class clsAutoInvoiceDb
{
    private Database objDb = new DatabaseProviderFactory().CreateDefault();
    public int CreateCustomer(string _CustomerName, string _CustomerAddress, 
                              string _CustomerPhone, string _CustomerEmail)
    {
        DbCommand cmd = objDb.GetStoredProcCommand("usp_UpsertCustomer");
        objDb.AddParameter(cmd, "@return_value", DbType.Int32, ParameterDirection.ReturnValue, null, DataRowVersion.Default, null);
        objDb.ExecuteNonQuery("usp_UpsertCustomer", -1, _CustomerName, _CustomerAddress, _CustomerPhone, _CustomerEmail);

        return Convert.ToInt32(objDb.GetParameterValue(cmd, "@return_value"));

-我的问题/问题-我的问题/问题

插入总是成功的,但是当返回语句执行时,@return_value是空的。在我重新分解使用entlib之前,这个代码段很好。现在无法得到我的返回值。有人有什么想法吗?已经在这上面浪费了3+时间。

EN

回答 1

Stack Overflow用户

发布于 2016-05-11 08:04:55

我无意中发现了你的问题,我也有同样的痛苦。

我尝试过帖子所暗示的,但是它不起作用,而且在这方面有有限的官方指导。

然而,作为一个解决办法,我已经开始工作了(砖头,欢迎.-)

  1. 在sql中,不要使用返回,而是使用选择返回值。所以在你的情况下做这个 if @initcount < (select count(*) from dbo.Customer) select max(CustomerID) from dbo.Customer else select 0 end
  2. 在c#中这样做

var returnValue = db.ExecuteScalar("usp_UpsertCustomer",parameterArray);

希望它能帮助您和其他同行的企业库数据访问阻止用户。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21071677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档