gpt4 book ai didi

c# - oracle 参数化查询 - 如何更改/删除/修改参数

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:36 24 4
gpt4 key购买 nike

这是我的场景:我使用简单的 c# winform 从我的数据库表中查询数据——我们称它为 XTable。 Winform 有一个组合框,其中包含来自 XTable 的 ACol 列的不同值。代码下方

查询:

select * from XTable where ACO = :param

c#

DataTable dt = new DataTable();
OracleDataReader odr;
StreamReader read = new StreamReader(@"C:\temp\query.sql");
string zap = read.ReadToEnd();
OracleCommand ocom = new OracleCommand(zap, ocn);
ocom.Parameters.Add(":param", OracleDbType.Varchar2).Value = this.cmbError.text;
odr = ocom.ExecuteReader();
dt.Load(odr);

直到我从组合中选择一个 signle 值,它才会按我预期的那样工作。但我想在我的组合框值中添加第一个符号 *(星号)。星号表示:没有过滤器,从组合框中获取所有值。如何构建一个 sql 查询来满足我的需要?

最佳答案

当值为 * 时,您将有两个查询,当值不同于 * 时,会有另一个查询。我不知道您为什么要从 SQL 文件加载查询。 这会消耗资源。最好把它写成字符串。

if(this.cmbError.text != "*")
string sql = "select * from XTable where ACO = :param"
else
string sql = "select * from XTable

只有当值不是“*”时才应该添加参数

if(this.cmbError.text != "*")
ocom.Parameters.Add(":param", OracleDbType.Varchar2).Value = this.cmbError.text;

此外,如果您正在使用 StreamReaderOracleDataReader,则必须释放它们!

你可以这样做:

using(StreamReader reader = new StreamReader(@"C:\temp\query.sql"))
{

}

即使发生异常,这也会自动调用 Dispose。如果您不将其包装在 using block 中,则应使用 try/catch/finally。

try
{
StreamReader reader = new StreamReader(@"C:\temp\query.sql")
}
catch
{
throw;
}
finally
{
reader.Close(); // Close call dispose.
}

关于c# - oracle 参数化查询 - 如何更改/删除/修改参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28236183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com