使用c#从存储过程中读取参数时出现问题

2024-01-08

我刚刚遇到一个奇怪的问题,我无法检索 sql 存储过程输出参数值。我被这个问题困扰了近2个小时。

代码很简单

    using (var con = new SqlConnection(connectionString))
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("sp_mgsearach", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter param1 = new SqlParameter("@SearchTerm", SqlDbType.VarChar);
            param1.Value = searchTerm;
            param1.Direction = ParameterDirection.Input;
            cmd.Parameters.Add(param1);
            SqlParameter param2 = new SqlParameter("@start", SqlDbType.Int);
            param2.Value = start;
            param2.Direction = ParameterDirection.Input;
            cmd.Parameters.Add(param2);
            SqlParameter param3 = new SqlParameter("@end", SqlDbType.Int);
            param3.Value = end;
            param3.Direction = ParameterDirection.Input;
            cmd.Parameters.Add(param3);
            SqlParameter param4 = new SqlParameter("@total", SqlDbType.Int);
            param4.Direction = ParameterDirection.InputOutput;
            param4.Value = 0;
            cmd.Parameters.Add(param4);


            var reader = cmd.ExecuteReader();
            LoadHits(reader);           
            if (lstHits.Count > 0)
                total = Convert.ToInt32(cmd.Parameters["@total"].Value);
            else
                total = 0;

        }

@total 值始终为空。但是当我在查询分析器中执行通过探查器生成的查询时,它返回正常。

最后我发现这是由于SQL连接造成的。

如果我的话效果很好在读取输出参数之前关闭连接

            LoadHits(reader);           
            con.close()
            if (lstHits.Count > 0)
                total = Convert.ToInt32(cmd.Parameters["@total"].Value);
            else
                total = 0;

WT..,我只是不明白为什么它会这样..有人有想法吗?


参数值返回于endTDS 流的(因为您可以在查询结束时选择数据后更改它)。你一定要注意消费allTDS 数据(或者至少导致缓冲区被刷新,这Close()为您做)以获得更新的参数值,例如:

do { while(reader.Read() {} }
while (reader.NextResult());

对于查询后期引发的 SQL 错误也是如此。您还可以尝试添加using;这可能也足够了:

using(var reader = cmd.ExecuteReader()) {
    LoadHits(reader);  
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用c#从存储过程中读取参数时出现问题 的相关文章

随机推荐

  • 检查 url WebView Swift 是否有效

    我想在将视频网址嵌入到我的 webView 之前检查它是否有效 因为如果用户输入无法解析或包含视频的 url 那么 webView 将显示一个白框 if MyVariables link is valid let Code NSString
  • 如何为 Matplotlib 图形添加剪贴板支持?

    在 MATLAB 中 有一个非常方便的选项可以将当前图窗复制到剪贴板 尽管 Python numpy scipy matplotlib 是 MATLAB 的绝佳替代品 但遗憾的是缺少这样的选项 这个选项可以轻松添加到 Matplotlib
  • 如何让机器保持清醒状态?

    我有一个用 Java 编写的服务器软件 可以在 Windows 和 OS X 上运行 它不是在服务器上运行 而是在普通用户的 PC 上运行 类似于 torrent 客户端 我希望该软件发出信号到操作系统以在机器处于活动状态时保持机器唤醒 防
  • Windows 服务:在作为 LocalSystem 运行时侦听套接字

    我正在用 C 语言为 Windows 编写一个类似服务器的小型程序 使用 MinGW GCC 在 Windows 7 上测试 该程序最终应该作为本地系统帐户的服务运行 我正在创建一个套接字 并使用 Windows 套接字bind liste
  • 使用 Nunit TestCaseSource 运行测试设置的正确方法

    我正在尝试使用 NUnit 中的 TestCaseSource 运行多个测试 但我很难让 SetUp 在我需要的时候运行 目前它按照我想要的方式工作 但感觉不 正确 所以以下是主要测试用例代码 简化 public class ImportT
  • Jenkins 的 Hash 的 Java 端口 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找这个文件的java端口 C 中的 Jenkins 哈希 http burtleburtle net bob c lookup2
  • 如何使用 Hibernate 映射用户数据类型(复合类型)

    我对 Hibernate 世界还很陌生 我通过 ER CASE TOOL TOAD 对我的数据库进行了建模 并定义了几种用户数据类型 复合类型 例如 假设我有一个类型 Contact 在 PostgreSQL 中声明如下 CREATE TY
  • ODP.NET 错误无法找到请求的 .Net Framework 数据提供程序

    我正在尝试使用 Oracle 11g Express 和 NET 4 0 框架开发 ASP NET MVC 4 0 应用程序 我可以使用 ODP NET 提供程序连接到数据库 还可以针对数据库生成 EDMX 我不能做的是使用实体框架查询底层
  • 如何使用 Spark UDF 返回复杂类型

    您好 提前谢谢您 我的程序是用java编写的 我无法转移到scala 我目前正在使用以下行处理从 json 文件中提取的 Spark DataFrame DataFrame dff sqlContext read json filePath
  • django中间件使post请求空白

    如果我使用中间件 我发送的发布数据将被捕获为空白 如果我从 settings py 文件中删除中间件 它将返回发布数据 我究竟做错了什么 这是我删除中间件时的正确结果 这是中间件代码 这里的缩进可能是错误的 class CheckAutho
  • spec/rails_helper.rb 与 spec/spec_helper.rb 有何不同?我需要它吗?

    我正在第二次学习 Rails 教程 当我输入这个 rails generate integration test static pages I get spec rails helper rb and spec spec helper rb
  • 将文件从目录拉取到 NPM 的根文件夹中

    我正在向 NPM 发布一个库 当我构建库时 生成的工件被放置在dist文件夹位于我的项目的根目录中index js 当用户从 NPM 安装时我想index js出现在root在他们创建的文件夹中node modules文件夹 目前 它保留在
  • 如何在 Swift 中获取 AVAsset 的视频时长

    这可能是重复的问题 但我花了很多时间来解决 我将 mp4 文件下载到纪录片目录中 我可以使用此函数获取所有文件名 func listFilesFromDocumentsFolder gt String let fileMngr FileMa
  • 使用 GroupBy 和 Average 将 SQL 转换为 lambda LINQ

    我花了几个小时尝试将简单的 SQL 转换为 lambda LINQ SELECT ID AVG Score FROM myTable GROUP BY ID 任何想法 from t in myTable group t by new t I
  • 如何在临时构建后调试 iPhone 应用程序?

    我对我的应用程序进行了临时分发 现在我想再次调试它 我已经使用 CoreData 更改了一些内容 但我不能 如果我使用 分发设置 按 调试 则默认图片会在设备上启动 但出现错误 调试错误 正在调试的程序未运行 如果我使用调试设置 我会收到另
  • 为什么 cron 不能正确执行我的 PHP 脚本?

    我有一个 PHP 脚本 只是一个简单的脚本 我试图让它作为 cronjob 运行 每次执行 PHP 脚本时 我都会收到一封包含 PHP 脚本本身的邮件 我该如何解决这个问题 我在谷歌上搜索了很多 但找不到任何有效的东西 在您的 Direct
  • 将 webpack worker-loader 与 nuxt.js 结合使用

    我正在尝试在以下范围内使用 Web Workernuxt js 框架 https nuxtjs org 但不断收到参考错误 ReferenceError Worker is not defined 我已经安装了工人装载机1 1 1 http
  • 您可以在 URL QueryItems 中发送除字符串之外的对象吗?

    好的 我正在构建一个 iMessage 应用程序 并且要来回传输数据 我必须使用URLQueryItems 我正在与一个SKScene并且需要转移Ints CGPoints 图像等 阅读Apple的文档和我自己的尝试 似乎你只能将字符串存储
  • Python:在满足特定条件时跳过代码块(计算)而不使用“if”语句

    我有一小段代码 我正在尝试以更好的方式编写它 因为它有一堆 if 语句 这是一些大项目的小代码 问题是这样的 当代码运行时 函数 f g 或 和 k 可以返回 None 或数值数据 每当返回 None 值时 就必须跳过其余的计算 因为无法完
  • 使用c#从存储过程中读取参数时出现问题

    我刚刚遇到一个奇怪的问题 我无法检索 sql 存储过程输出参数值 我被这个问题困扰了近2个小时 代码很简单 using var con new SqlConnection connectionString con Open SqlComma