我有一个带有条目的OracleDB:
1,测试,测试
2,测试,测试
ID号码(8,0)
名字(CHAR(30 BYTE))
CHAR姓名(30 BYTE)
现在我有这行代码来选择这些条目:
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 这是美国的方式,我必须填写参数?但为什么直接的方式不需要呢?
获取Column大小并填充参数值的正确方法是什么? 或者我做错了吗?
谢谢: - )
答案 0 :(得分:1)
我认为你的问题出在列类型中。
如此处所述What is the major difference between Varchar2 and char ,CHAR(#)类型它意味着存储固定的长度字符串。在您的代码中,您将参数转换为varchar2类型。
command.Parameters.Add(":param", OracleDbType.Varchar2).Value = "test";
尝试将其转换为OracleDbType.Char
(或将列设为Varchar2)