繁体   English   中英

ORA-01008不是所有变量都绑定在简单查询C#上

[英]ORA-01008 Not All Variables Bound on a simple query C#

我最困难的时间试图中和此oracle,而不是绑定所有变量。 我尝试了一些Google搜索提供的常见建议,但似乎无济于事。

最终,出于测试目的,我将查询和代码简化为一个简单的

public override List<DiscountList> GetDiscountList(string name)
    {

        string cmdText = "select discount from users where name = :Name";

        DbParameters prms = new DbParameters(Ado.AdoTemplate.DbProvider);

        prms.AddWithValue("Name", name);

        List<DiscountList> list = Ado.AdoTemplate.QueryWithRowMapperDelegate<DiscountList>(CommandType.Text, cmdText,
        new RowMapperDelegate<DiscountList>((reader, rowNum) =>
        {
            DiscountList item = new DiscountList();
            item.Discount = reader.GetString(0, string.Empty);

            return item;
        })).ToList();

        return list;
    }

但是我仍然收到Oracle错误,我什至在AddWithValue中对第二个参数进行了硬编码,以确保它没有传递null问题,但仍然是相同的错误。

编辑:包括整个功能

不确定为什么要使用DbParameters代替OracleParameter

command.Parameters.Add(New OracleParameter("Name", name));

(要么)

command.Parameters.AddWithValue("Name", name);

没有更大的代码段,很难说您所做的工作是否可行。 为了追赶,这应该是我相信您正在尝试做的一个实际例子。

请注意, AddWithValue非常方便,几乎总是会导致正确的数据类型映射。 如果您确实希望明确表述,则可以使用指定数据类型的重载。 如果您开始传递像Blobs这样的怪异数据类型,这可能会变得很重要。

OracleCommand cmd = new OracleCommand("select discount from users where name = :Name",
    conn);
cmd.Parameters.Add("Name", OracleDbType.VarChar);
cmd.Parameters[0].Value = name;

OracleDataReader reader = cmd.ExecuteReader();

while (reader.Read())
{
    object discount = reader.GetValue(0);
}

reader.Close();

原来这对我来说是一个愚蠢的错误,我忘记了一段重要的代码:

})).ToList();

应该

}),prms).ToList();

我认为查询应该是这样的:

string cmdText = "select discount from users where name = @Name";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM