【发布时间】:2015-11-11 19:36:32
【问题描述】:
我有一个非常简单的存储过程,它返回给我一些输出变量。
如果我通过任何方法(Management Studio、Visual Studio Server Explorer)执行这个存储过程,它工作得很好。
问题是,如果我尝试在客户端使用 ExecuteNonQuery() 执行它,它不会执行存储过程,ExecuteNonQuery() 返回值 -1 并且没有输出。我想知道我是否应该使用ExecuteNonQuery() 以外的其他东西来执行此过程并获取这些输出变量。
这是我的存储过程:
CREATE PROCEDURE [dbo].ChekEmail
@Email varchar(50),
@Id int output,
@Flag_User int output
AS
SET @Id = 0
SET @Id = (SELECT Client.Id FROM Client WHERE Client.Email = @Email)
IF(@Id > 0)
BEGIN
SET @Flag_User = 1
RETURN @Id
END
ELSE
BEGIN
SET @Id = (SELECT Clinic.Id FROM Clinic WHERE Clinic.Email = @Email)
IF(@Id > 0)
BEGIN
SET @Flag_User = 2
RETURN @Id
END
END
这就是我执行它的地方
public int CheckEmail(string Email)
{
Conection con = new Conection();
SqlCommand cmd = new SqlCommand("ChekEmail");
cmd.Connection = con.connect();
cmd.Parameters.AddWithValue("@Email", Email);
cmd.Parameters.Add("@Id", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.Parameters.Add("@Flag_User", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.CommandType = CommandType.StoredProcedure;
int x = cmd.ExecuteNonQuery();
if (x >= 0)
{
int Id_Owner = Convert.ToInt32(cmd.Parameters["@Id"].Value.ToString());
int Flag_User = Convert.ToInt32(cmd.Parameters["@Flag_User"].Value.ToString());
if (Flag_User == 1)
{
return Id_Owner;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
【问题讨论】:
-
“不起作用”?有什么症状。
-
“它不起作用”不是对问题的解释。
-
不执行存储过程,ExecuteNonQuery()返回值-1,没有输出。
标签: c# sql .net stored-procedures