当我用reader从oracle数据库中读数据字符串的时候发现有些字串的字符被'\0'替代 导致读出的字符串不完整
例如:
reader.read 后
reader[0].ToString() 的内容:在数据库对应字段中本来应该是 “hello”
但是 reader[0].ToString()里面装得却是"hel\0\0"
所以导致我的字符串不完整变成"hel"
有遇到过此问题的编程高手没?谢谢
例如:
reader.read 后
reader[0].ToString() 的内容:在数据库对应字段中本来应该是 “hello”
但是 reader[0].ToString()里面装得却是"hel\0\0"
所以导致我的字符串不完整变成"hel"
有遇到过此问题的编程高手没?谢谢
而且你的问题我这里到没遇到过。帮你顶顶看有没有高手吧
reader[0].ToString().Replace("\","");
是数据库字段类型不对(比方:不是足够长度的字符串)\0\0是结束标志吧
说的可能不对
你的数据库定义是不是char,试着改成varchar
该字段是什么类型?
重新打开IDE,再运行一次看看!
我用dmh_tcl语言建表,用PL_SQL打开查看数据库,对应字符串完全正确,但在读出时候,就出问题。
而且在相同的列里面有的会有这种问题而有的没有如:
AAA BBB CCC DDD
__________________________________________________
AA1 BB1 CC1 DD1
A\0\0 BB2 CC2 DD2
AA3 BB3 CC\0 DD3
字段的长度都一样,所以不应该是定义长度的问题,唉这个问题太罕见了.......
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)
)
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);
}
我刚刚重新建了一个新项目(以上代码),读取数据。还是出现同样问题,说明,原来的逻辑没有错误。这个代码的简单逻辑应该不会有错,(大家帮忙看看)。。 有没有可能是什么表空间之流的问题?
我刚才又重新读取公司数据库的其它表,发现存在同样字符串取不全的问题,应该肯定错误是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();
ORA-00162:external dbid length 18 is greater than maximum(16)这个谁能帮分析下??
嗯最后确定是 oracal 8i客户端出的问题。散分吧
这里还有100分
http://community.csdn.net/expert/Topicview2.asp?id=3913577
需要分的请去接分