首先,讲一下本人的意图,从数据库中读取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”,后面的部分就不再读取了,不知朋友们是否遇到过同样的问题,有经验的帮忙解决一下了。多谢了。

解决方案 »

  1.   

    dataReader[dtCommand.Rows[i]["SColumnName"].ToString().Trim()].ToString().Trim(new char[] {" ", "\0"})
      

  2.   

    两位好,多谢两位,
    问题解决了,我用的是kw(飞龙)的方法,
    dataReader[dtCommand.Rows[i]["SColumnName"].ToString().Trim()].ToString().Trim(new char[] {" ", "\0"})
    new char[] {" ", "\0"
    这种方式写法有点问题,我也试验过了,效果不是我想的。
      

  3.   

    感觉微软dataReader的功能差了点。没有做过滤,可能是开发人员偷懒了。呵呵。