c# - MySqlCommand 调用函数返回类型
问题描述
我有一个关于这个的问题:
使用 MariaDB
10.5.11-MariaDB-1:10.5.11+maria~focal
和给定的函数(简化)
CREATE FUNCTION `activity_plugin_active`() RETURNS binary(1)
BEGIN
DECLARE result INT DEFAULT 0;
RETURN result;
END
为了在 .NET 中获得函数的结果,我使用了辅助方法
bool activitiesPluginActive = 1 == ExecuteIntScalarAsync(
"activity_plugin_active",
null,
CancellationToken.None)
.GetAwaiter().GetResult();
但是这个方法有点笨重
private async Task<int> ExecuteIntScalarAsync(
string functionName,
IEnumerable<DbParameter> parameters,
CancellationToken cancellationToken = default)
{
using (MySqlConnection conn = new MySqlConnection(databaseConfiguration.GetConnectionString()))
{
await conn.OpenAsync();
MySqlCommand cmd = new MySqlCommand(functionName)
{
CommandType = CommandType.StoredProcedure,
Connection = conn
};
if (parameters != null)
foreach (var parameter in parameters)
cmd.Parameters.Add(parameter);
var returnValue = new MySqlParameter("returnvalue", MySqlDbType.Int32)
{
Direction = ParameterDirection.ReturnValue
};
cmd.Parameters.Add(returnValue);
logger.LogInformation($"Executing { functionName }");
await cmd.ExecuteScalarAsync(cancellationToken);
// return value is byte[1], value 48
byte[] bytes = returnValue.Value as byte[];
// need to cast to string, value "0"
var sValue = System.Text.Encoding.Default.GetString(bytes);
// need to cast to int
return Convert.ToInt32(sValue);
}
}
正如您在上面的代码注释中看到的,返回值是一个字节 [1] - 对于给定的函数,它的值是 48 - 数字零的 ASCII 代码。虽然返回类型定义为 MySqlDbType.Int32。
如何直接返回一个整数而不需要转换两次?
解决方案
这是因为在您的函数中,您指定将函数的结果返回为binary(1)
(ie RETURNS binary(1)
) 。您可以尝试将其更改为INT
喜欢:
CREATE FUNCTION `activity_plugin_active`() RETURNS INT
BEGIN
DECLARE result INT DEFAULT 0;
RETURN result;
END
推荐阅读
- java - 如何将打印到文件的数组的奇怪输出转换为其原始值?
- javascript - luckyorange 分析正在捕获静态内容而不是 javascript 版本
- android - 单个活动:带有 AppBarLayout 的片段
- database-design - 如何在 Power BI 中分组?
- atom-editor - ATOM 如何启用选择“$”符号以及变量名?
- scala - 如何使用 getOrElseUpdate 在 Map 中增加 Int 值?
- node.js - 错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。【我还在用函数组件】
- php - 由 select 方法中的输入引起的查询构建器的不同行为
- perl - 如何搜索和替换多次出现的单词
- python - urllib 无效语法和搜索栏抓取