我有一个带有条目的OracleDB:
1,测试,测试
2,测试,测试
Id号(8,0)
Firstname (CHAR(30字节))
二名查(30字节)
现在我有了这行代码来选择这些条目:
string query = @"SELECT ID,FIRSTNAME,LASTNAME FROM persdata
WHERE (FIRSTNAME = 'test')";
var command = new OracleCommand(query, dbConnection)
{ CommandType = CommandType.Text, BindByName = true };
IDataReader reader = command.ExecuteReader();
while (reader.Read())
{
int someColumn = reader.GetInt32(reader.GetOrdinal("ID"));
string anotherColumn = reader.GetString(reader.GetOrdinal("VORNAME"));
string thirdColumn = reader.GetString(reader.GetOrdinal("NACHNAME"));
Console.WriteLine(
String.Format("{0}: {1}, {2}", someColumn, anotherColumn, thirdColumn)
);
}这很好,但如果我使用的参数如下:
string query = @"SELECT ID,FIRSTNAME,LASTNAME FROM persdata
WHERE (FIRSTNAME = :param)";
var command = new OracleCommand(query, dbConnection)
{ CommandType = CommandType.Text, BindByName = true };
command.Parameters.Add(":param", OracleDbType.Varchar2).Value = "test";
IDataReader reader = command.ExecuteReader();
while (reader.Read())
{
int someColumn = reader.GetInt32(reader.GetOrdinal("ID"));
string anotherColumn = reader.GetString(reader.GetOrdinal("FIRSTNAME"));
string thirdColumn = reader.GetString(reader.GetOrdinal("LASTNAME"));
Console.WriteLine(
String.Format("{0}: {1}, {2}", someColumn, anotherColumn, thirdColumn)
);
}我什么都没得到!但是,如果我将ParameterValue设置为:
command.Parameters.Add(":param", OracleDbType.Varchar2).Value = "test ";我得到这个条目o.O,这就是我必须填写参数的方式吗?但是为什么直接的方式不需要它呢?
那么,获取列大小和填充参数值的正确方法是什么呢?还是我做错了?
谢谢:-)
发布于 2016-08-03 15:53:35
我想你的问题是列型的。
正如这里所解释的,CHAR(#)类型用于存储固定的长字符串。在代码中,将参数转换为varchar2类型。
command.Parameters.Add(":param", OracleDbType.Varchar2).Value = "test";尝试将其转换为OracleDbType.Char (或将列转换为Varchar2)。
https://stackoverflow.com/questions/38747649
复制相似问题