上方廣告

Lady Kukki 手作糖霜餅乾

2009年2月13日 星期五

利用OleDb讀取csv檔 字串問題

如果同一個資料欄位存在數字字串的話,使用這個方法預設會判定為數值因此字串的資料就會消失不見,因此必須動態加入.ini,但是個人認為除非上傳的檔案都是同樣的相同的檔名就
可以這樣用,不然的話多人同時存取的時候可能會有lock的問題存在。
下面第二種方法使用資料流來讀取資料就沒有會將字串判定為數值的事情發生了

string strPath = Server.MapPath("~\\Upload\\");
string strName = DateTime.Now.ToString("yyyyMMddhhmmss") + ".csv";
File1.PostedFile.SaveAs(strPath + strName);

string mystring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + ";Extended Properties=text";
OleDbConnection objConn = new OleDbConnection(mystring);
OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [" + strName + "]", objConn);
DataSet myDs = new DataSet();
myDa.Fill(myDs);
objConn.Close();
DataGrid1.DataSource = myDs.Tables[0];
DataGrid1.DataBind();

//使用方法一讀檔
for (int i = 0; i < myDs.Tables[0].Rows.Count; i++)
{
    Response.Write("No" + i + ". " + myDs.Tables[0].Rows[i][0].ToString());
}

//使用方法二讀檔
FileStream infile = File.Open(strPath + strName, FileMode.Open, FileAccess.Read, FileShare.Read);
StreamReader myStreamReader = new StreamReader(infile, System.Text.Encoding.Default);
string[] myStringArray;

if (myStreamReader.Peek() != -1) myStreamReader.ReadLine();

int intCount = 0;
while (myStreamReader.Peek() != -1)
{
    myStringArray = myStreamReader.ReadLine().Split(',');
    if (myStringArray[0] != "")
    {
        Response.Write("No" + intCount + ". " + myStringArray[0].ToString());
    }
    intCount++;
}
myStreamReader.Close();
myStreamReader.Dispose();
infile.Close();

參考網址:http://mobile.dotblogs.com.tw/yilinliu/archive/09/23/5452.aspx