如何从 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";
这样您就无需担心客户端转换。
我有这个 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";
这样您就无需担心客户端转换。