首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OracleCommand参数Varchar2悖论;-)

OracleCommand参数Varchar2悖论;-)
EN

Stack Overflow用户
提问于 2016-08-03 15:20:47
回答 1查看 1.1K关注 0票数 0

我有一个带有条目的OracleDB:

1,测试,测试

2,测试,测试

Id号(8,0)

Firstname (CHAR(30字节))

二名查(30字节)

现在我有了这行代码来选择这些条目:

代码语言:javascript
复制
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)
    );
}

这很好,但如果我使用的参数如下:

代码语言:javascript
复制
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设置为:

代码语言:javascript
复制
command.Parameters.Add(":param", OracleDbType.Varchar2).Value = "test                          ";

我得到这个条目o.O,这就是我必须填写参数的方式吗?但是为什么直接的方式不需要它呢?

那么,获取列大小和填充参数值的正确方法是什么呢?还是我做错了?

谢谢:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-03 15:53:35

我想你的问题是列型的。

正如这里所解释的,CHAR(#)类型用于存储固定的长字符串。在代码中,将参数转换为varchar2类型。

代码语言:javascript
复制
command.Parameters.Add(":param", OracleDbType.Varchar2).Value = "test";

尝试将其转换为OracleDbType.Char (或将列转换为Varchar2)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38747649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档