我有一个函数和一个过程来检查数据库中是否存在一条记录,或者当记录存在而0不存在时,not.It假设得到1。我执行了我的过程,它可以正常工作,但在visual studio中不能工作。我找不到问题,这是我的过程
Create PROCEDURE [dbo].[checkRepititiveModel]
@modelName nvarchar(50)
as
If EXISTS ( SELECT * FROM models WHERE modelName = @modelName)
begin
return 1
end
Else
begin
return 0
end下面是我的函数:
public int CheckRepetitive(string connectionString,string modelName)
{
SqlCon = new SqlConnection(connectionString);
if (SqlCon.State != ConnectionState.Open)
{
SqlCon.Open();
}
SqlCommand com = new SqlCommand("checkRepititiveModel", SqlCon);
com.Parameters.AddWithValue("@modelName", modelName);
com.CommandType = CommandType.StoredProcedure;
int result = Convert.ToInt32(com.ExecuteScalar());
if (SqlCon.State != ConnectionState.Closed)
{
SqlCon.Close();
}
return result;
}我检查了main形式的if语句
int a = Db.CheckRepetitive(ConStr, txtBxModelName.Text);
if (a > 0)
{
MessageBox.Show(a.ToString() + " exist!!");
return;
}发布于 2017-10-10 00:13:56
这是因为您应该选择一些内容,以便ExecuteScalar可以检索行集的第一个元素。更改您的SP并执行选择而不是返回。如下所示:
ALTER PROCEDURE [dbo].[checkRepititiveModel]
@modelName nvarchar(50)
AS
BEGIN
IF EXISTS (SELECT 1 FROM Catalogo.Maquina WHERE Codigo = @modelName)
SELECT 1
ELSE
SELECT 0
END发布于 2017-10-10 00:32:38
要使用该过程的返回值,您需要创建一个绑定到ReturnValue方向的参数。
此外,您真的应该将连接设置为函数的本地连接,并使用using语句处理它。
public int CheckRepetitive(string connectionString,string modelName)
{
using(var sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
SqlCommand com = new SqlCommand("checkRepititiveModel", sqlCon);
com.Parameters.Add("@modelName", SqlDbType.NVarChar).Value = modelName;
SqlParameter retval = sqlcomm.Parameters.Add("@rc", SqlDbType.Int);
retval.Direction = ParameterDirection.ReturnValue;
com.CommandType = CommandType.StoredProcedure;
com.ExecuteNonQuery();
return (int)retval.Value;
}
}https://stackoverflow.com/questions/46650474
复制相似问题