无法调用存储过程

时间:2017-11-30 19:11:36

标签: c# sql-server entity-framework

我是C#的初学者。我无法调用存储过程。

我的存储过程是:

CREATE PROCEDURE USP_login
    @us VARCHAR(20),
    @pwd VARCHAR(20)
AS
BEGIN TRAN
    BEGIN TRY
        SELECT * 
        FROM dbo.KhachHang 
        WHERE tenDangNhap = @us AND matKhau = @pwd
    END TRY
    BEGIN CATCH
        ROLLBACK TRAN
        RETURN 0
    END CATCH

    COMMIT TRAN
    RETURN 1
GO

在我的C#代码中,我使用此函数调用USP_login存储过程,但它不起作用:

public bool loginStored(string us, string pwd)
{
    object[] sqlParams =
    {
         new SqlParameter  ("@userName", us),
         new SqlParameter  ("@passWord", pwd),
    };

    var rs = db.Database.SqlQuery<bool>("USP_login @userName, @passWord", sqlParams).SingleOrDefault();
    return rs;
}

屏幕截图中的错误消息:

Error Message

1 个答案:

答案 0 :(得分:3)

看起来SELECT * ...返回的不只是一个bool。 (根据查询,显然表格至少两个字段tenDangNhapmatKhau。)但这就是您告诉代码期望的内容:

db.Database.SqlQuery<bool>(/.../)

只选择您想要的列:

SELECT SomeBooleanValue FROM dbo.KhachHang WHERE tenDangNhap=@us AND matKhau=@pwd

为每条记录指定正确的类型(可能是您需要定义的自定义类):

db.Database.SqlQuery<SomeObjectType>(/.../)