【问题标题】:TableAdapter Query with optional WHERE paramerter带有可选 WHERE 参数的 TableAdapter 查询
【发布时间】:2015-07-27 09:00:19
【问题描述】:

我正在尝试使用可选的 WHERE 参数创建 TableAdapter 查询。 这是我的查询:

    SELECT Productos.Categoria, Productos.Subcategoria, Productos.Nombre,
 Productos.Marca, Productos.Descripcion, Proveedores.Nombre AS Proveedor, Precios.Precio

    FROM Precios, Productos, Proveedores
    WHERE Precios.Producto_ID = Productos.ID AND Precios.Proveedor_ID =
 Proveedores.ID AND Proveedores.Nombre = ?

我希望 "Proveedores.Nombre = ?" 是可选的,或者如果 ? = null 或无,查询不按 Proveedores.Nombre

过滤

我试过这个:

(Proveedores.Nombre =@PNombre OR @PNombre = NULL)

但我有一个错误:

生成的 SELECT 语句:

“@”附近的 WHERE 子句出错。

无法解析查询文本

非常感谢您的帮助,

问候

安德烈斯

编辑: 我在一个 Windows 窗体项目中。我正在使用一个 DataSource - DataSet 链接到我的访问数据库。因此,为了创建 FillBy() 和 GetData(),我使用了一个表格适配器,它是在我将 DataSource 插入到我的 WindowsForm 时自动创建的。 这是我使用的 GetData() 所创建的方法:

public virtual DB_ProvProd2DataSet.ProductosDataTable GetDataByTodo(string Nombre) {
    this.Adapter.SelectCommand = this.CommandCollection[5];
    if ((Nombre == null)) {
        throw new global::System.ArgumentNullException("Nombre");
    }
    else {
        this.Adapter.SelectCommand.Parameters[0].Value = ((string)(Nombre));
    }
    DB_ProvProd2DataSet.ProductosDataTable dataTable = new DB_ProvProd2DataSet.ProductosDataTable();
    this.Adapter.Fill(dataTable);
    return dataTable;
}

其中 this.CommandCollection[5] = 查询,this.Adapter.SelectCommand.Parameters[0] 是与“?”相关的输入查询。

我希望这会有所帮助! 谢谢!!!

【问题讨论】:

    标签: c# sql visual-studio-2013 tableadapter


    【解决方案1】:

    尝试将其分配给局部变量: 字符串 tmp= @PNombre

    (Proveedores.Nomber==tmp || tmp == null)

    【讨论】:

    • 这可能是个愚蠢的问题,但我应该在哪里声明 string tmp= @PNombre ?
    • 在进行查询之前。
    • 我不能,我正在使用来自数据源 - 数据集的查询向导。我在帖子中添加了更多信息。
    • 此时我宁愿加载一个数据集并根据我需要查看的内容过滤数据集
    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 2014-10-05
    • 2014-04-06
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2021-03-18
    • 2018-08-16
    相关资源
    最近更新 更多