【问题标题】:Result type from SQL Server stored procedureSQL Server 存储过程的结果类型
【发布时间】:2012-08-03 11:23:23
【问题描述】:

好的,我正在调用一个存储过程,但我不确定我的 VB.net 代码将接收什么类型。

这是存储过程:

@IDNo varchar(Max)
AS
select a.IDNo,
        p.EMAIL
from person p 
    left join customer a on p.person_id=a.person_id
where (a.IDNo=@IDNo)

到目前为止,这是我的 VB;

resultSet = thisDataCxt.sp_GetEmail(IDNo).FirstOrDefault()

我的问题是,resultSet 应该是什么类型?我可以将其设为Object 吗?如果是这样,我如何访问其 IDNo 和 EMAIL 属性。

还需要记住,我使用它来查看是否没有返回结果(也就是 IDNo 没有匹配)所以我需要测试 resultSet 是否为 NULL。

【问题讨论】:

    标签: sql-server vb.net entity-framework stored-procedures


    【解决方案1】:

    为什么不能使用 Dataset & datatables 并将 sp 输出存储在其中。如果 datatable 的行数超过 0,则尝试通过它迭​​代值。

    【讨论】:

    • 听起来不错。但是说它返回ID而不是电子邮件,我如何从我的数据表中找到它?
    • 还有一件事是您可以通过提供输入和输出参数在vb.net中执行sproc。这样您将在变量中获得sproc的输出。
    • 您的数据行将在电子邮件字段中有一个 DBNull
    【解决方案2】:

    它将是您将FunctionImport sp_getEmail 的结果映射到的任何内容,可能是ComplexType。它本身不会是一个集合,因为您使用的是 FirstOrDefault。

    顺便说一句,在您的 SP 前面加上 sp_ 是不好的做法。 http://sqlserverpedia.com/blog/sql-server-bloggers/stored-procedure-performance-using-%E2%80%9Csp_%E2%80%9D-prefix-%E2%80%93-myth-or-fact/

    【讨论】:

    • 不是我的系统,所以无法更改它们的命名约定。
    【解决方案3】:

    检查此示例代码。

    cmd.CommandText = "your proc name";
                        cmd.CommandType = CommandType.StoredProcedure;
    
                        SqlParameter param1 = cmd.Parameters.Add("@param1", SqlDbType.VarChar, 255);
                        param1.Direction = ParameterDirection.Input;
                        SqlParameter param2 = cmd.Parameters.Add("@param2", SqlDbType.Int, 8);
                        param2.Direction = ParameterDirection.OutPut;
                        cmd.ExecuteNonQuery();
    

    现在你在@param2 中有了你的输出值。

    【讨论】:

      猜你喜欢
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 2014-12-07
      相关资源
      最近更新 更多