问题描述
大神们,我之前用datatable存放commandsql语句,但是数据量大的话非常吃服务器内存。另外我有特定输出格式,需要每个字段用“|”分割,之前用datagridview.Rows.columns.count来定位每个格的数据,并在每格数据之后加"|",然后把每一行直接按行输出,然后下一行数据直接换行输出。for(inti=0;i<dt.Rows.Count;i++){for(intj=0;j<dt.Columns.Count;j++){sw.Write(dt.Rows[i][j].ToString().Trim()+"|");}sw.Write("rn");}但是使用sqldatareader就不好做了。就看到一个visiblefieldcountusing(StringWritersw=newStringWriter()){while(sdr.Read()){for(inti=0;i<sdr.VisibleFieldCount;i++){sw.Write(sdr[i].ToString());sw.Flush();}}}具体有办法做吗?另外还有个问题,我用Unicode编码输出到txt文件,Encoding.Unicode有几张表会出现ANSI码,打开txt文件会出现乱码,这几张表在TXT另存为的时候会显示格式为ANSI但是用UTF-8就不会了,是什么原因呢?Encodingutf8=Encoding.UTF8;byte[]s=utf8.GetBytes(sw.ToString());
解决方案
解决方案二:
求大神帮助啊啊啊啊
解决方案三:
是不是sqldatareader只能读取一行数据。
解决方案四:
如果不用datatable的话,因为datatable要是读取几千w数据几十G内存都得卡死。。
解决方案五:
datareader是一行一行读取,然后每行都有N列,VisibleFieldCount虽然跟我印象中名字略有差异,但这段是遍历数据列,其实跟你那段没区别,改成下面的就行for(inti=0;i<sdr.VisibleFieldCount;i++){sw.Write(sdr[i].ToString()+"|");}sw.Write("rn");
解决方案六:
一起读肯定慢分块
解决方案七:
引用4楼starfd的回复:
datareader是一行一行读取,然后每行都有N列,VisibleFieldCount虽然跟我印象中名字略有差异,但这段是遍历数据列,其实跟你那段没区别,改成下面的就行for(inti=0;i<sdr.VisibleFieldCount;i++){sw.Write(sdr[i].ToString()+"|");}sw.Write("rn");
求帮助,如何统计行数呢?我想dataGridView1.Rows[i].Cells[2].Value=统计表里的行数就是for(inti=0;i<sdr.VisibleFieldCount;i++){sw.Write(sdr[i].ToString()+"|");}之后的整行的行数。之前在datagridview里可以直接rows.count..现在不行了
解决方案八:
while(sdr.Read())]for循环之前再加个num++这不难吧……