[英]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.