首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExecuteScalar返回0值

ExecuteScalar返回0值
EN

Stack Overflow用户
提问于 2017-10-09 23:55:04
回答 2查看 185关注 0票数 0

我有一个函数和一个过程来检查数据库中是否存在一条记录,或者当记录存在而0不存在时,not.It假设得到1。我执行了我的过程,它可以正常工作,但在visual studio中不能工作。我找不到问题,这是我的过程

代码语言:javascript
复制
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

下面是我的函数:

代码语言:javascript
复制
 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语句

代码语言:javascript
复制
int a = Db.CheckRepetitive(ConStr, txtBxModelName.Text);
            if (a > 0)
            {

                MessageBox.Show(a.ToString() + " exist!!");
                return;
            }
EN

回答 2

Stack Overflow用户

发布于 2017-10-10 00:13:56

这是因为您应该选择一些内容,以便ExecuteScalar可以检索行集的第一个元素。更改您的SP并执行选择而不是返回。如下所示:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2017-10-10 00:32:38

要使用该过程的返回值,您需要创建一个绑定到ReturnValue方向的参数。

此外,您真的应该将连接设置为函数的本地连接,并使用using语句处理它。

代码语言:javascript
复制
 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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46650474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档