c# - SQL Server 存储过程的 JSON 字符串输出参数在 SSMS 中有效,但在 C# 客户端中产生空值
问题描述
在我的存储过程中,我声明了一个名为的 OUTPUT 参数@Stats
:
@Stats nvarchar(max) OUTPUT
在存储过程结束时,我将 JSON 查询的结果分配给输出参数:
SELECT @Stats = (SELECT * FROM JsonStats FOR JSON AUTO)
@Stats
如果我在 SSMS 中执行存储过程,我会按预期获取 JSON 数据:
DECLARE @Param1 nvarchar(max) = '...'
DECLARE @Stats nvarchar(max)
EXEC MySP @Param1, @Stats OUTPUT
SELECT @Stats
但是,当我从 C# 代码执行存储过程时,我得到一个空字符串:
SqlCommand cmd = new SqlCommand("MySP", conn)
{
CommandType = CommandType.StoredProcedure
};
var inputParam = new SqlParameter("@Param1", invoiceKeyListJson);
cmd.Parameters.Add(inputParam);
var outputParam = new SqlParameter("@Stats", SqlDbType.NVarChar, -1);
outputParam.Direction = ParameterDirection.Output;
cmd.Parameters.Add(outputParam);
cmd.ExecuteNonQuery();
string statsJson = outputParam.Value.ToString();
运行上述代码后,statsJson
为空。奇怪的是,如果我@Stats
在存储过程中对任意字符串的赋值进行硬编码,statsJson
就会被赋予该值。
为什么 SSMS 和 C# 之间的结果不一致?我需要做什么才能在 C# 中获取 JSON 数据?
解决方案
你必须设置你outputParam
喜欢的大小:
var outputParam = new SqlParameter("@Stats", SqlDbType.NVarChar, 100000)
推荐阅读
- git - 本地分支在没有明显原因的情况下显示未暂存的更改和未跟踪的文件
- javascript - 最近找到一个类并更改输入值
- google-cloud-platform - 关于 Google Cloud HTTP(S) 负载均衡器的 TCP 空闲超时问题
- swift - 自定义表格视图单元格中的 UILabel 大文本未显示为多行
- git - Git 从 Azure DevOps 获取拉取请求
- php - 像 JPG 或 MP4 这样的媒体文件本身可以包含脚本标签吗?
我正在用 PHP 编写图像上传器。它将允许用户在网站上上传 JPG 和 PNG 图像。接下来是 MP4 视频(如链接的图片所示)。最重要的是,我的目标是让这个上传器尽可能安全。
(如果您有兴趣,作为旁注,上传者目前:
- python - TypeError: unhashable type: list in len(re.findall())
- reactjs - Nextjs没有在构建时导出组件变量
- c - 有没有办法为输出包含多个“if”条件?
- react-native - React Native APP中的RecyclerListView错误