NpgsqlCommand在受影响的行中返回-1

时间:2015-07-26 08:30:14

标签: c# postgresql boolean sqlcommand

我正在试图制作一个bool,检查我们的数据库中是否存在param accountname。对于true和false,变量doesAccountExist总是返回-1,期望为1或0。

这不是一个特色,我读到人们在使用sprocs时遇到了问题。

如果我在pgadmin中运行SQLCommand,它可以工作。我看到一行是1还是0,取决于它是否存在。

我一直在使用管理员帐户来查看是否是我的只读帐户是问题,遗憾的是它不是。

            string connectionString = "Server=localhost;Port=5432;Database=XXX;User Id=XXX;Password=XXX;";
        NpgsqlConnection connection = new NpgsqlConnection(connectionString);

        string commandString = "SELECT CASE WHEN EXISTS ( SELECT * FROM account WHERE username = '"+accountname+"') THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END";
        NpgsqlCommand command = new NpgsqlCommand(commandString, connection);

        try
        {
            connection.Open();
            int doesAccountExist = command.ExecuteNonQuery();
            connection.Close();

            if (doesAccountExist == 1)
                return true;
            else
                return false;
        }
        catch (Exception)
        {
            connection.Close();
            return false;           
        }

编辑:

可能是解决方案。因为ozczecho启发我,ExecuteNonQuery()只返回UPDATE,DELETE和INSERT的行,我改为ExecuteScalar()并将对象转换为bool。

bool doesAccountExist = Convert.ToBoolean(command.ExecuteScalar());

这是一个解决方案,它有效,我会得到真或假的回报。

0 个答案:

没有答案