首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExecuteScalar()总是返回NULL

ExecuteScalar()总是返回NULL
EN

Stack Overflow用户
提问于 2016-08-15 18:39:41
回答 2查看 5.1K关注 0票数 3

我试图使用ExecuteScalar()从数据库中返回一个整数。但是,当我在数据库本身上运行查询时,我得到了正确的答案,而c#总是给我一个0(空)。我知道它返回一个null,因为在我添加id = Convert.ToInt32(command.ExecuteScalar());之前,它会给我一个错误,告诉我要确保NULL被处理。我希望它还能退货3吨。

代码语言:javascript
复制
 private int getFamilyId()
 {
    int id = 0;
    using (SqlConnection connection = new SqlConnection(Globaldata.ConnectionString))
    {
        using (SqlCommand command = new SqlCommand())
        {
            string sqlString = @"SELECT [Id] FROM [dbo].[FamilyDetails];";
            command.Connection = connection;
            command.CommandText = sqlString;
            try
            {
                connection.Open();
                id = Convert.ToInt32(command.ExecuteScalar());
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK);
            }
            finally
            {
                connection.Close();
            }
            return id;
        }
    }
}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-15 19:31:33

当你这样做时:

代码语言:javascript
复制
string sqlString = @"SELECT [Id] FROM [dbo].[FamilyDetails];";

你不会想这样做的:

代码语言:javascript
复制
id = Convert.ToInt32(command.ExecuteScalar());

这里有三件事可能出错。

  • 问题1:如果表中没有行,command.ExecuteScalar()将返回Null
  • 问题2:如果表中有任何行,command.ExecuteScalar()将返回它碰巧遇到的第一行的值,因为SELECT语句不限于1值。
  • 问题3:如果Id列未声明为,NULL command.ExecuteScalar()可以返回DbNull,这在转换为Integer时没有意义。

试着看看当表中有0或1或2条记录时会发生什么。

票数 1
EN

Stack Overflow用户

发布于 2016-08-15 19:05:54

-更新--

它现在起作用了,我的连接字符串丢失了一个字符。我认为当我取出连接字符串的连接超时部分时发生了这种情况。

谢谢你的建议!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38960959

复制
相关文章

相似问题

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