如何从 SQL 服务器 Table 转换 TinyInt 值?

How can I cast a TinyInt value from a SQL Server Table?

我有这个 SQL 服务器(Express)table:

...使用 TinyInt 的 GenreId(最多只有几十个不同的流派)。

此 C# 代码失败,显示“指定的转换无效。”

int genreId = 0;
. . .
genreId = GetGenreIdForGenre(_genre);

失败点的“_genre”值为“冒险”。调用 GetGenreIdForGenre() 应该 return "1":

这是失败的行,在 GetGenreIdForGenre():

return (int)command.ExecuteScalar();

在上下文中,GetGenreIdForGenre() 方法是:

private int GetGenreIdForGenre(string genre)
{
    try
    {
        string qry = "SELECT GenreId FROM dbo.GENRES WHERE Genre = @genre";
        using (SqlConnection connection = new SqlConnection(_connectionString))
        {
            using (SqlCommand command = new SqlCommand(qry, connection))
            {
                command.Parameters.AddWithValue("@genre", genre);
                connection.Open();
                return (int)command.ExecuteScalar();
            }
        }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
         return 0;
     }
 }

没有可用的 (TinyInt) 转换。 Int32 也失败了。我需要做什么来检索 TinyInt 值?

command.ExecuteScalar 的 return 类型是 object 所以它的值是 return 盒装 byte。在将其转换为 int 之前,您必须将 byte:

拆箱
return (byte)reader.ExecuteScalar();

取消装箱转换为 byte 后,它将使用可用的隐式转换为 int(以匹配方法的 return 类型),因此您不需要再次转换。

在查询中使用它:

string qry = "SELECT CAST(GenreId as int) FROM dbo.GENRES WHERE Genre = @genre";

这样您就无需担心客户端转换。