多个可选 WHERE 参数

2024-03-19

我想为一组 SQL 查询创建一个过滤器,以便用户可以按最多三个值过滤 SQL SELECT。 用户界面具有三个文本框,每个文本框都与 SQL 表中的列名称相关联。用户可以通过这些文本框提供一个、两个或三个标准。

这是我到目前为止所拥有的。我知道if(textbox...声明不起作用,但我找不到方法来做到这一点。 (使用"SELECT TOP 10 primaryFile FROM dbo.basket WHERE (basket.itemGuid = @itemguid) AND (basket.batchid = @batchid) AND (basket.account = @account"不会返回任何结果。

private List<string> GetSnippets()
{
    List<string> snippets = new List<string>();

    string connectionString = @"SNIP";
    //string sql = @"SELECT TOP 10 primaryFile FROM dbo.basket WHERE";
    string sql = @"SELECT TOP 10 primaryFile FROM dbo.basket WHERE (basket.itemGuid = @itemguid) AND (basket.batchid = @batchid) AND (basket.account = @account)";
    //if (textBoxGUID.Text.Length > 0) sql += " basket.itemGuid = @itemguid";
    //if (textBoxBatchID.Text.Length > 0) sql += " basket.batchid = @batchid";
    //if (textBoxAccount.Text.Length > 0) sql += " basket.account = @account";

    using (SqlConnection connection = new SqlConnection(connectionString))
    using (SqlCommand command = new SqlCommand(sql, connection))
    {
        command.Parameters.AddWithValue("@itemguid", textBoxGUID.Text);
        command.Parameters.AddWithValue("@batchid", textBoxBatchID.Text);
        command.Parameters.AddWithValue("@account", textBoxAccount.Text);

        try
        {
            connection.Open();
            if (connection.State == ConnectionState.Open)
            {
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        snippets.Add((string)reader["primaryFile"]);
                        Console.WriteLine(reader["primaryFile"]);
                    }
                }
            }
        }
        catch (Exception)
        {
            throw;
        }
    }
    return snippets;
}

我会将 where 子句分开并根据需要附加到它后面。

string sql = @"SELECT TOP 10 primaryFile FROM dbo.basket ";
string where = "";
if (textBoxGUID.Text.Length > 0) 
{
    if(where.Length > 0 ) where += "AND "
    where += " (basket.itemGuid = @itemguid) ";
}
if (textBoxBatchID.Text.Length > 0) 
{
    if(where.Length > 0 ) where += "AND "
    where += " (basket.batchid = @batchid) ";
}
if (textBoxAccount.Text.Length > 0) 
{
    if(where.Length > 0 ) where += "AND "
    where += " (basket.account = @account) ";
}
if(where.Length > 0) {
    sql += "WHERE " + where;
}

然后您必须执行相同的操作将参数添加到命令中:

if (textBoxGUID.Text.Length > 0) command.Parameters.AddWithValue("@itemguid", textBoxGUID.Text);
if (textBoxBatchID.Text.Length > 0) command.Parameters.AddWithValue("@batchid", textBoxBatchID.Text);
if (textBoxAccount.Text.Length > 0) command.Parameters.AddWithValue("@account", textBoxAccount.Text);

这是更多的代码,但它允许您准确搜索提供的参数。

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

多个可选 WHERE 参数 的相关文章

  • Reporting Services 在哪里存储其日志文件

    最相关的谷歌结果似乎表明 为了访问日志 我们必须将您自己的日志表部署到数据库并制作报告服务写入它 http technet microsoft com en us library ms157403 aspx 简而言之 Reporting S
  • 如何使用汇编获取BIOS时间?

    我正在从头开始实现一个小型操作系统 用于教育目的 现在 我想使用汇编来获取 BIOS 时间 我对此进行了很多搜索 但找不到任何代码示例来执行此操作 如果有人可以提供任何参考或代码示例或与此相关的任何内容 我将非常感激 See 时钟中断 1a
  • C# 中附加/分离事件处理程序的不同方式有什么区别

    我的问题有两个部分 首先 我们可以通过以下两种方式附加事件处理程序 myObject MyEvent new EventHandler MyHandler myObject MyEvent MyHandler 据我了解 这两者是等价的 在第
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • 如何搜索例程的内容/(SP-触发函数)

    我需要在数据库内所有例程的例程主体 存储过程 函数 触发器 中搜索文本 我该怎么做 Thanks SELECT OBJECT NAME object id FROM sys sql modules WHERE definition LIKE
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • 为什么重载方法在 ref 仅符合 CLS 方面有所不同

    公共语言规范对方法重载非常严格 仅允许根据其参数的数量和类型来重载方法 如果是泛型方法 则根据其泛型参数的数量进行重载 根据 csc 为什么此代码符合 CLS 无 CS3006 警告 using System assembly CLSCom
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 在存储过程中验证用户的最简单方法?

    我需要一个存储过程 可以通过发送以下内容来检查登录尝试时他们是否是有效用户login and password查看它们在数据库中是否匹配 有没有一种简单的方法可以做到这一点 如果没有更多信息 我目前能提供的最好信息是 CREATE STOR
  • 更改列时快速删除并重新创建多个索引、视图、统计信息

    我的 项目 表中有一个 StoreNumber 列 我想将其更改为 NOT NULL 我最近清理了所有旧数据 以便不存在空条目 但是 当我执行以下语句时 由于对各种视图 索引和统计信息的多重依赖 它失败了 ALTER TABLE Proje
  • 快速查询最新记录的方法?

    我有一张这样的表 USER PLAN START DATE END DATE 1 A 20110101 NULL 1 B 20100101 20101231 2 A 20100101 20100505 在某种程度上 如果END DATE i
  • asp.net c# 防止在从服务器端代码更改索引时触发 selectedindexchanged 事件

    我在同一个 aspx 页面上有两个下拉列表控件
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • 将一个 long 转换为两个 int 以进行重构

    我需要将一个参数作为两个 int 参数传递给 Telerik Report 因为它不能接受长参数 将 long 拆分为两个 int 并在不丢失数据的情况下重建它的最简单方法是什么 使用掩蔽和移位是最好的选择 根据文档 long 保证为 64
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 使用剪贴板 SetText 换行

    如何使用 SetText 方法添加换行符 I tried Clipboard SetText eee n xxxx 但当我将剪贴板数据粘贴到记事本中时 它没有给我预期的结果 预期结果 eee xxxx 我怎样才能做到这一点 Windows

随机推荐

  • Java 项目的 SLOC

    我需要一个免费工具来计算 Java 项目的 SLOC 我只需要以下指标 SLOC 注释行数 可选地javadoc 指标 可选地按文件类型 java js css html xml 等 对统计信息进行排序 Bonus 100 Java 我不喜
  • Python Base 36 编码

    如何在 Python 中以 36 为基数对整数进行编码 然后再次解码 您尝试过维基百科的示例代码吗 def base36encode number alphabet 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • Django TypeError:没有主键值的模型实例是不可散列的

    我有我的models py如下 class Article models Model date models DateTimeField null True blank True title models TextField default
  • 如何根据用户摘要生成随机 5 位数字

    大家好 我尝试根据用户总摘要生成 50 个 5 位数字 例如 用户给出 500000 然后我需要随机数 5 位乘 50 个数字等于 500000 我尝试了这个 但它不是 5 位数字 int balane 500000 int nums 50
  • 双向git镜像

    我有兴趣将本地 git 存储库设置为远程存储库的镜像 我读过一些可能相关的帖子 但主要区别是我需要对两个存储库具有读写访问权限 大多数时候 用户将针对 Repo A 进行工作 但有时他们会针对 Repo B 进行工作 并且这些需要通过服务器
  • 统计某个时间段之前和之后存在的值

    我有以下简单的表格 您也可以在SQL Fiddle here http www sqlfiddle com 9 74d8fb 3 CREATE TABLE Orders Customer TEXT Order Date DATE INSER
  • 带有 CSS 的 GWT Html 文件

    当我使用 GWT 插件创建新项目时 它会为我创建一个框架项目 在html文件中有一条注释说 考虑内联 CSS 以减少请求的文件数量 为什么我要考虑使用内联CSS 我很难将 css 放在单独的文件中而不是内联 会减少文件的大小吗 不是吗 答案
  • 检查 Wicket 中的用户代理

    我使用的是 wicket 1 5 但我无法在getClientInfo 方法 WebRequest RequestCycle get getRequest 我在其他地方看到了这段代码 WebClientInfo clientInfo Web
  • YARN 作业历史记录不可访问

    我正在使用来自源代码的最新 hadoop 版本 3 0 0 我已经启动并运行了时间轴服务 并配置了 hadoop 以将其用于作业历史记录 但是 当我单击资源管理器 UI 中的历史记录时 出现以下错误 HTTP ERROR 404 Probl
  • 如果在从开始到结束迭代时对地图元素调用擦除()会发生什么?

    在下面的代码中 我循环遍历地图并测试是否需要删除元素 擦除元素并继续迭代是否安全 或者我是否需要在另一个容器中收集密钥并执行第二个循环来调用擦除 map
  • 无法调整大小的 JFrame 包错误

    JFrame s pack 当窗口无法调整大小时 该方法不会每次都起作用 请亲自尝试一下 可能需要重试几次 import javax swing import java awt public class FramePackBug publi
  • Eclipse javadoc 注释中的错误换行

    我认为 Eclipse 内置的 Java 格式化程序中有一个小但烦人的错误 我有一个 Javadoc 注释 如下所示 stuff code mTasksBelow 其中末尾的句点位于第 81 列中 格式化程序设置为在第 80 行包装 Jav
  • 如何在Python中正确实现映射协议?

    我正在使用 python spidermonkey 它在内部使用 PyMapping Check 来识别用作全局对象 在 rt new context global 中 是否实现了映射协议 这基本上是传递给 python spidermon
  • 更改 Magento 的“新产品”模块的默认产品限制

    据我了解 默认情况下 Magento 的 新产品 模块 new phtml 显示列出的最后 8 个产品 如何更改默认值 甚至可能完全删除限制 是的 这将完全改变 新产品 模块的行为 我理解 谢谢你 新产品块 Mage Catalog Blo
  • 视频错误:V4L:找不到摄像头设备

    我正在使用 ubuntu16 04 并尝试运行 opencv 脚本 当我使用时 video capture cv2 VideoCapture 1 它给我错误视频错误 V4L 找不到相机设备 没有打开视频窗口 但当我跑步时 video cap
  • 从函数获取输入 - C++ [重复]

    这个问题在这里已经有答案了 我在 C 中遇到了一个问题 我调用了一个为事物分配一些值的函数 但这些分配在函数完成后丢失了 这是我的代码 include
  • 如何缩小 Node.js 应用程序? (服务器端node.js,而不是客户端javascript)

    我想将我所有的大型 Node js 项目 编译 成一个巨大的 javascript 文件 然后我可以使用 Node Index js 运行它并开箱即用 Thanks 您可以使用 Browserify 来完成此操作 使用 bare可以选择忽略
  • 编译器看不到接口中的默认实现?

    这是我在一个 c 项目中的代码 该项目针对 NET Core 3 0 所以我应该使用 C 8 0 和 Visual Studio 2019 16 3 9 public interface IJsonAble public string To
  • 具有 JavaScript 执行功能的 Node.js Web 浏览器

    有没有node npm该模块将抓取网页或给定 URL 的内容 并像现实生活中的 Web 浏览器一样执行和评估其 JavaScript 包括XMLHttpRequest对象和类似的东西 我以为刮刀js https www npmjs com
  • 多个可选 WHERE 参数

    我想为一组 SQL 查询创建一个过滤器 以便用户可以按最多三个值过滤 SQL SELECT 用户界面具有三个文本框 每个文本框都与 SQL 表中的列名称相关联 用户可以通过这些文本框提供一个 两个或三个标准 这是我到目前为止所拥有的 我知道