关于web导入csv文件问题 请教高手:从面向对象的思想上如何设计web导入csv文件的问题,我的理解是该类应该包括什么共通的功能,在线等,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是说一个csv文件(逗号隔开的字符,打开文件是用excel文件打开的),在页面有个导入按钮,点击导入后弹出打开(路径),之后就可以把该excel(csv)文件导入到数据库中去,这个功能怎么实现,怎么能让他做成共通的类,新手上路,老师布置的作业,拜托各位高手 public interface ICSVWriterReader {//define a interface string CSVFile { get; set; } //csv file DataTable Read();//read csv to DataTable. bool Write(DataTable dt); //convert datatable to csv } public class CSVHelper:ICSVWriterReader { private string _csvFile; public CSVHelper(string csvFile) { this._csvFile = csvFile; } #region ICSVWriterReader Members public string CSVFile { get{ return _csvFile; } set{ _csvFile=value ;} } public DataTable Read() { FileInfo fi = new FileInfo(this._csvFile); if (fi == null || !fi.Exists) return null; StreamReader reader = new StreamReader(this._csvFile); string line = string.Empty; int lineNumber = 0; DataTable dt = new DataTable(); while ((line = reader.ReadLine()) != null) { if (lineNumber == 0) {//Create Tole dt = CreateDataTable(line); if (dt.Columns.Count == 0) return null; } else { bool isSuccess = CreateDataRow(ref dt, line); if (!isSuccess) return null; } lineNumber++; } return dt; } public bool Write(DataTable dt) { FileInfo fi = new FileInfo(this._csvFile); if (fi == null || !fi.Exists) return false; if (dt == null || dt.Columns.Count == 0 || dt.Rows.Count == 0) return false; StreamWriter writer = new StreamWriter(this._csvFile); //writer.AutoFlush = true; string line = string.Empty; line = CreateTitle(dt); writer.WriteLine(line); foreach (DataRow dr in dt.Rows) { line = CretreLine(dr); writer.WriteLine(line); } writer.Flush(); return true; } private DataTable CreateDataTable(string line) { DataTable dt = new DataTable(); foreach (string field in line.Split(FormatSplit, StringSplitOptions.None)) { dt.Columns.Add(field); } return dt; } private bool CreateDataRow(ref DataTable dt, string line) { DataRow dr = dt.NewRow(); string[] fileds=line.Split(FormatSplit, StringSplitOptions.None); if (fileds.Length == 0 || fileds.Length != dt.Columns.Count) return false; for (int i = 0; i < fileds.Length; i++) { dr[i] = fileds[i]; } dt.Rows.Add(dr); return true; } private char[] FormatSplit { get { return new char[] { ',' }; } } private string CreateTitle(DataTable dt) { string line = string.Empty; for (int i = 0; i < dt.Columns.Count; i++) { line += string.Format("{0}{1}", dt.Columns[i].ColumnName,FormatSplit[0].ToString()); } line.TrimEnd(FormatSplit[0]); return line; } private string CretreLine(DataRow dr) { string line = string.Empty; for (int i = 0; i < dr.ItemArray.Length;i++) { line += string.Format("{0}{1}", dr[i], FormatSplit[0].ToString()); } line.TrimEnd(FormatSplit[0]); return line; } } } C# Combobox的一个问题 【初学者求教】当前时间如何截取? 求助:依次提取一个TEXTBOX里面的N个值 怎样把多个sql操作在一个事务下完成 vs2005 C#标题栏的设置问题 duwamish7装不上去,高手低手帮忙! C# 打包详细步骤(可用的) 关于C#主程序入口的问题??急!! C# 中如何实现对结构体中的 指针成员变量申请栈内存? MDI的工具条怎么处理?有没有类似菜单合并的实现方法? up有分. c#中有没有类似于PHP 中的strpos这个函数? C#窗体在未被激活状态下截获键盘消息
{//define a interface
string CSVFile { get; set; } //csv file
DataTable Read();//read csv to DataTable.
bool Write(DataTable dt); //convert datatable to csv
} public class CSVHelper:ICSVWriterReader
{
private string _csvFile;
public CSVHelper(string csvFile)
{
this._csvFile = csvFile;
}
#region ICSVWriterReader Members
public string CSVFile
{
get{ return _csvFile; }
set{ _csvFile=value ;}
}
public DataTable Read()
{
FileInfo fi = new FileInfo(this._csvFile);
if (fi == null || !fi.Exists) return null;
StreamReader reader = new StreamReader(this._csvFile);
string line = string.Empty; int lineNumber = 0;
DataTable dt = new DataTable();
while ((line = reader.ReadLine()) != null)
{
if (lineNumber == 0)
{//Create Tole
dt = CreateDataTable(line);
if (dt.Columns.Count == 0) return null;
}
else
{
bool isSuccess = CreateDataRow(ref dt, line);
if (!isSuccess) return null;
}
lineNumber++;
}
return dt;
}
public bool Write(DataTable dt)
{
FileInfo fi = new FileInfo(this._csvFile);
if (fi == null || !fi.Exists) return false;
if (dt == null || dt.Columns.Count == 0 || dt.Rows.Count == 0) return false;
StreamWriter writer = new StreamWriter(this._csvFile);
//writer.AutoFlush = true;
string line = string.Empty;
line = CreateTitle(dt);
writer.WriteLine(line);
foreach (DataRow dr in dt.Rows)
{
line = CretreLine(dr);
writer.WriteLine(line);
}
writer.Flush();
return true;
}
private DataTable CreateDataTable(string line)
{
DataTable dt = new DataTable();
foreach (string field in
line.Split(FormatSplit, StringSplitOptions.None))
{
dt.Columns.Add(field);
}
return dt;
}
private bool CreateDataRow(ref DataTable dt, string line)
{
DataRow dr = dt.NewRow();
string[] fileds=line.Split(FormatSplit, StringSplitOptions.None);
if (fileds.Length == 0 || fileds.Length != dt.Columns.Count) return false;
for (int i = 0; i < fileds.Length; i++)
{
dr[i] = fileds[i];
}
dt.Rows.Add(dr);
return true;
}
private char[] FormatSplit
{
get { return new char[] { ',' }; }
}
private string CreateTitle(DataTable dt)
{
string line = string.Empty;
for (int i = 0; i < dt.Columns.Count; i++)
{
line += string.Format("{0}{1}", dt.Columns[i].ColumnName,FormatSplit[0].ToString());
}
line.TrimEnd(FormatSplit[0]);
return line;
}
private string CretreLine(DataRow dr)
{
string line = string.Empty;
for (int i = 0; i < dr.ItemArray.Length;i++)
{
line += string.Format("{0}{1}", dr[i], FormatSplit[0].ToString());
}
line.TrimEnd(FormatSplit[0]);
return line;
}
}
}