Lea*_*rve 4 c# sql stored-procedures
我有以下SQL存储过程,其中包含一个输入参数和一个out参数.
CREATE PROCEDURE [dbo].[spCanUserEdit]
(
@username nvarchar(255)
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CanEdit bit
SELECT
@CanEdit = CanUserEdit
FROM tblUsers
WHERE username = LOWER(@username)
RETURN SELECT @CanEdit
END
GO
Run Code Online (Sandbox Code Playgroud)
在上面的存储过程中,CanUserEdit列tblUsers是位类型列,默认值为0.现在,当我在Management Studio中执行此过程时,它运行正常,但是当我command.ExecuteScalar()在我的C#代码中使用时,它总是返回null.谁能告诉我这里我做错了什么.
以下是我的C#方法
public static bool CanUserEdit(string userName)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[Constants.ConnectionStringName].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "spCanUserEdit";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@username", userName));
conn.Open();
bool canEdit = (bool)cmd.ExecuteScalar();
return canEdit;
}
}
}
Run Code Online (Sandbox Code Playgroud)
亲切的问候
Dan*_*Dan 13
问题在于您返回数据的方式.如果你想使用ExecuteScalar,你不应该返回,而只是简单地选择.
尝试更改SP如下:
CREATE PROCEDURE [dbo].[spCanUserEdit]
(
@username nvarchar(255)
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CanEdit bit
SELECT
@CanEdit = CanUserEdit
FROM tblUsers
WHERE username = LOWER(@username)
SELECT @CanEdit
RETURN 0
END
GO
Run Code Online (Sandbox Code Playgroud)
如果您无法更改SP,但代码,解决方案是使用ExecuteNonQuery读取参数'@ReturnValue'.