当我用reader从oracle数据库中读数据字符串的时候发现有些字串的字符被'\0'替代 导致读出的字符串不完整
例如:
     reader.read 后
     reader[0].ToString()  的内容:在数据库对应字段中本来应该是 “hello”
                                   但是  reader[0].ToString()里面装得却是"hel\0\0"
                                   所以导致我的字符串不完整变成"hel"
有遇到过此问题的编程高手没?谢谢

解决方案 »

  1.   

    不明白你的问题。如果数据库中的字符串就是"Hello" 读取出来的数据也应该是Hello,我看不行用别的方法读取看看。不要局限在一个方法下读取。
    而且你的问题我这里到没遇到过。帮你顶顶看有没有高手吧
      

  2.   

    那索性就这样:
    reader[0].ToString().Replace("\","");
      

  3.   

    同意 tiaoci(我挑刺,我快乐) 
    是数据库字段类型不对(比方:不是足够长度的字符串)\0\0是结束标志吧
      

  4.   

    不大可能。竟然会有这种问题。建议重新安装.net和Oracle
      

  5.   

    没用过oracle
    说的可能不对
    你的数据库定义是不是char,试着改成varchar
      

  6.   

    数据类型如果是varchar,该为nvarchar
      

  7.   

    数据库中的值有没有问题?
    该字段是什么类型?
    重新打开IDE,再运行一次看看!
      

  8.   

    我也觉的这个问题不可思议。
    我用dmh_tcl语言建表,用PL_SQL打开查看数据库,对应字符串完全正确,但在读出时候,就出问题。
    而且在相同的列里面有的会有这种问题而有的没有如:
               AAA          BBB          CCC      DDD
      __________________________________________________
               AA1          BB1          CC1      DD1
               A\0\0        BB2          CC2      DD2
               AA3          BB3          CC\0     DD3
    字段的长度都一样,所以不应该是定义长度的问题,唉这个问题太罕见了.......
      

  9.   

    为了解决非常高实时性的数据操作。不知道有没有人在研究in-memory realtime database,C#中有没有在内存中的表操作???希望高手指教
      

  10.   

    create table tester_j750 (
    tester varchar (10),
    operater varchar(10),
    lotID varchar(20),
    program varchar(30),
    loadboard varchar(20),

    state varchar(20),
    temperature varchar(10),
    lotstart varchar(20),
    time varchar(20),
    test_time integer default 0 not null,
    eot_wait_time integer default 0 not null,
    sot_wait_time integer default 0 not null,
    system_index_time integer default 0 not null,

    count integer default 0 not null,
    processed_num integer default 0 not null,
    processed_good integer default 0 not null,
    processed_num_total integer default 0 not null,
    processed_good_total integer default 0 not null,

    site1_state varchar(10),
    site1_used integer default 0 not null,
    site1_good varchar(10),
    site1_hbc integer default 0 not null,
    site1_sbc integer default 0 not null,

    site2_state varchar(10),
    site2_used integer default 0 not null,
    site2_good varchar(10),
    site2_hbc integer default 0 not null,
    site2_sbc integer default 0 not null,

    site3_state varchar(10),
    site3_used integer default 0 not null,
    site3_good varchar(10),
    site3_hbc integer default 0 not null,
    site3_sbc integer default 0 not null, site4_state varchar(10),
    site4_used integer default 0 not null,
    site4_good varchar(10),
    site4_hbc integer default 0 not null,
    site4_sbc integer default 0 not null, site5_state varchar(10),
    site5_used integer default 0 not null,
    site5_good varchar(10),
    site5_hbc integer default 0 not null,
    site5_sbc integer default 0 not null,

    site6_state varchar(10),
    site6_used integer default 0 not null,
    site6_good varchar(10),
    site6_hbc integer default 0 not null,
    site6_sbc integer default 0 not null, site7_state varchar(10),
    site7_used integer default 0 not null,
    site7_good varchar(10),
    site7_hbc integer default 0 not null,
    site7_sbc integer default 0 not null, site8_state varchar(10),
    site8_used integer default 0 not null,
    site8_good varchar(10),
    site8_hbc integer default 0 not null,
    site8_sbc integer default 0 not null,

    primary key(tester)
    )
      

  11.   

    con=new OracleConnection("user id=testly; data source=b3tnpi; password=testly");
    con.Open();
    cmd = con.CreateCommand();
    cmd.CommandText="select * from tester_j750";
    lv.Items.Clear();
    reader= cmd.ExecuteReader();
    while (reader.Read())
    {
    ListViewItem item = new ListViewItem(new string[]{reader[0].ToString(),reader[1].ToString(),reader[2].ToString(),reader[3].ToString(),reader[4].ToString(),reader[5].ToString(),reader[6].ToString(),reader[7].ToString(),reader[8].ToString(),reader[9].ToString(),reader[10].ToString(),reader[11].ToString(),reader[12].ToString(),reader[13].ToString(),reader[14].ToString(),reader[15].ToString(),reader[16].ToString(),reader[17].ToString(),reader[18].ToString(),reader[19].ToString(),reader[20].ToString(),reader[21].ToString(),reader[22].ToString(),reader[23].ToString(),reader[24].ToString(),reader[25].ToString(),reader[26].ToString(),reader[27].ToString(),reader[28].ToString(),reader[29].ToString(),reader[30].ToString(),reader[31].ToString(),reader[32].ToString(),reader[33].ToString(),reader[34].ToString(),reader[35].ToString(),reader[36].ToString(),reader[37].ToString(),reader[38].ToString(),reader[39].ToString(),reader[40].ToString(),reader[41].ToString(),reader[42].ToString(),reader[43].ToString(),reader[44].ToString(),reader[45].ToString(),reader[46].ToString(),reader[47].ToString(),reader[48].ToString(),reader[49].ToString(),reader[50].ToString(),reader[51].ToString(),reader[52].ToString(),reader[53].ToString(),reader[54].ToString(),reader[55].ToString(),reader[56].ToString(),reader[57].ToString()});
    lv.Items.Add(item);
    }
    我刚刚重新建了一个新项目(以上代码),读取数据。还是出现同样问题,说明,原来的逻辑没有错误。这个代码的简单逻辑应该不会有错,(大家帮忙看看)。。 有没有可能是什么表空间之流的问题?
      

  12.   

    说明数据库中的数据就是这样的,你保存数据时保存不对么!“在数据库对应字段中本来应该是 “hello”” 你是怎么确认这一点的呢?
      

  13.   

    我用pl_sql打开看过了,数据库中数据存储的没有问题是"hello"在debug时查到reader[i]中是"hel\0\0"
    我刚才又重新读取公司数据库的其它表,发现存在同样字符串取不全的问题,应该肯定错误是C#的了
    我的oracle引用是 System.Data.OracleClient; 读取数据代码是:
    con=new OracleConnection("user id=testly; data source=b3tnpi; password=testly");
    con.Open();
    cmd = con.CreateCommand();
    cmd.CommandText="select * from tester_j750";
    reader= cmd.ExecuteReader();
    reader.read();
      

  14.   

    重装了.net 问题依然郁闷,看来真要重买机器了>_<
      

  15.   

    也许是数据访问驱动程序问题,改用odbc试试看。
      

  16.   

    刚才直接用工具箱里面的 oracleDataAdapter 连接出错 好像抓到问题的根了报警:
    ORA-00162:external dbid length 18 is greater than maximum(16)这个谁能帮分析下??
      

  17.   

    唉,这个只是一个servername长度的错误,和开始的错误不着边........倒霉
      

  18.   


    嗯最后确定是 oracal 8i客户端出的问题。散分吧
    这里还有100分 
         http://community.csdn.net/expert/Topicview2.asp?id=3913577
    需要分的请去接分