一个Select语句返回uint,而另一个则在同一列上返回Int64?

时间:2018-07-27 16:02:06

标签: c# mysql

我正在使用MySql数据库,在我的代码中的某处,我做了如下选择:

using (MySqlTransaction transaction = conn.BeginTransaction())
{
    using (MySqlCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "SELECT * FROM USERS WHERE ID = @id";
        cmd.Transaction = transaction;
        cmd.Parameters.AddWithValue("@id", id);
        cmd.Prepare();
        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            if (reader.HasRows)
            {
                reader.Read();
                result = new User()
                {
                    Id = reader.GetFieldValue<uint>(0),
                    NameFirst = reader.GetFieldValue<string>(1),
                    NameLast = reader.GetFieldValue<string>(2),
                    DateOfBirth = reader.GetFieldValue<DateTime>(3)
                };
            }
            else
            {
                result.NameFirst = ErrorCodeUtility.GetEnumName(ErrorCodes.SQL_INVALID_ID);
            }
        }
    }
}

现在Id = reader.GetFieldValue<uint>(0)行很有趣,因为它可以工作。该类型是无符号整数,因此是正确的。但是我在代码的其他地方做了下面的事情:

using (MySqlTransaction transaction = conn.BeginTransaction())
{
    using (MySqlCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "SELECT 1 ID FROM USERS WHERE ID = @id";
        cmd.Transaction = transaction;
        cmd.Parameters.AddWithValue("@id", id);
        cmd.Prepare();
        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            if (reader.HasRows)
            {
                reader.Read();
                uint receivedId = reader.GetFieldValue<uint>(0);
                if (receivedId == id)
                {
                    result = true;
                }
            }
        }
    }
}

uint receivedId = reader.GetFieldValue<uint>(0);行失败。它告诉我类型是Int64而不是预期的uint。

这里可能出了什么问题?我正在查询完全相同的表,只是将其限制为一列而不是所有数据,因为我对所有表都不感兴趣。

3 个答案:

答案 0 :(得分:1)

问题出在您的Select语句中。

您的意思可能是:

SELECT TOP 1 ID FROM USERS WHERE ID = @id

您错过了关键字“ TOP”,因此,您得到以下输出,返回时为Int64。

enter image description here

如果有帮助,请告诉我。

答案 1 :(得分:0)

答案是我使用的MySql语法错误。不用写

SELECT 1...

正确的语法是:

SELECT params FROM table WHERE conditions LIMIT number

所以在这种情况下,最终是:

LIMIT 1

答案 2 :(得分:0)

我想问您什么,您确定您的sql语句正确吗?您要选择1 ...要实现什么?

还有一件事情,我建议在使用选择查询时不要使用*。使用某些查询所需的显式列。