OledbDataReader 读取数据写到文本中遇到”\0“ StreamReader的对象读取认为是文件末尾,不能继续读取

liuchengit 2005-09-16 09:15:07
首先,讲一下本人的意图,从数据库中读取n个字段的值,按我的想法组合成一个SQL Server语句,然后插到另一个数据库中。
方法:
读取部分:
用OledbDataReader对象
if(dataReader[dtCommand.Rows[i]["SColumnName"].ToString().Trim()].ToString().Trim() == "")
{
strValues += "null, ";
}
else
{
strValues += "'" + dataReader[dtCommand.Rows[i]["SColumnName"].ToString().Trim()].ToString().Trim() + "', ";
}
然后组合成如下面的语句,插到数据库中(方法:commInsert.ExecuteNonQuery();)
"INSERT SMBasicInfo ([StudentNo], [StudentName], [Sex], [BornDate], [Nation], [ClassInfoName], [Hometown]) VALUES ('020040525', '朴京林', '男', '19810523', '朝鲜', '电信00405', '吉林省;龙井市开山屯\0')"
"INSERT SMBasicInfo ([StudentNo], [StudentName], [Sex], [BornDate], [Nation], [ClassInfoName], [Hometown]) VALUES ('030040126', '闫正团', '男', '19781010', '汉', '会计00401', '长春市朝阳区卫星路1\0')"

不过当遇到读取的字段中有下面的情况时:
1、吉林省;龙井市开山屯 (数据中有“;”,“,”,“‘”等这类的字符时)就会在数据的末尾补“\0”;
2、长春市朝阳区卫星路1(数据的末尾为数字的)也会在数据的末尾补“\0”;

然而“\0”是文本的结束符,执行commInsert.ExecuteNonQuery();时其实执行的命令语句为
“INSERT SMBasicInfo ([StudentNo], [StudentName], [Sex], [BornDate], [Nation], [ClassInfoName], [Hometown]) VALUES ('030040126', '闫正团', '男', '19781010', '汉', '会计00401', '长春市朝阳区卫星路1”
错误为{"第 1 行: '长春市朝阳区卫星路1' 附近有语法错误。\r\n字符串 '长春市朝阳区卫星路1' 之前有未闭合的引号。" }
当写日志的时候
using(StreamWriter sw = File.AppendText(fileFullName))
{
sw.WriteLine(logInfo);
}
日志写入时候很正常
不过日志中包含“\0”
当我用方法
using(StreamReader sr = File.OpenText(fileFullName))
{
form.tbLogInfo.Text = sr.ReadToEnd();
}
form.ShowDialog();
读取时调到“\0”,后面的部分就不再读取了,不知朋友们是否遇到过同样的问题,有经验的帮忙解决一下了。多谢了。
...全文
192 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimh 2005-09-16
  • 打赏
  • 举报
回复
dataReader[dtCommand.Rows[i]["SColumnName"].ToString().Trim()].ToString().Trim(new char[] {" ", "\0"})
zkw 2005-09-16
  • 打赏
  • 举报
回复
建议在读取字符串后,如果没有负面影响先替换字符串中的'\0',然后再进行使用,问题可以解决的
liuchengit 2005-09-16
  • 打赏
  • 举报
回复
感觉微软dataReader的功能差了点。没有做过滤,可能是开发人员偷懒了。呵呵。
liuchengit 2005-09-16
  • 打赏
  • 举报
回复
两位好,多谢两位,
问题解决了,我用的是kw(飞龙)的方法,
dataReader[dtCommand.Rows[i]["SColumnName"].ToString().Trim()].ToString().Trim(new char[] {" ", "\0"})
new char[] {" ", "\0"
这种方式写法有点问题,我也试验过了,效果不是我想的。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧