最近在使用C#对Excel进行操作,遇到了一些诡异的问题...
首先是一些代码,很容易看懂,实际上是用了一些SQL语句
这是写操作:
try
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
System.Data.OleDb.OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
for (int i = 0; i < DataList.Count; i++)
{
DataStruct d = DataList[i];
string sql = "INSERT INTO [Sheet1$] (日期,时间,时刻,极端量,Pi,Pi开盘价,Pi最高价,Pi最低价,Pi结束价,Pj,P止盈,P止损,T止盈,T止损,类型) VALUES(";
//string sql = "INSERT INTO [Sheet1$] (Data,Tim,Ti,Q,Pi,PiOpen,PiMax,PiMin,PiEnd,Pj,Pk,Pd,T,Tj,Typ) VALUES(";
sql += "'" + d.getData() + "',";
sql += "'" + d.getQiTime() + "',";
sql += "'" + d.getType() + "')";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
conn.Close();
return true;
}
catch (System.Data.OleDb.OleDbException err)
{
MessageBox.Show("写入Excel失败!失败原因:" + err.Message, "提示信息",
MessageBoxButtons.OK, MessageBoxIcon.Information);
//System.Diagnostics.Debug.WriteLine("写入Excel发生错误:" + ex.Message);
}
这是读操作:
try
{
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
OleDbConnection OleConn = new OleDbConnection(strConn);
OleConn.Open();
String sql = "SELECT * FROM [Paper$]";//可是更改Sheet名称,比如sheet2,等等
OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
DataSet OleDsExcle = new DataSet();
OleDaExcel.Fill(OleDsExcle, "Paper");
OleConn.Close();
return OleDsExcle;
}
catch (Exception err)
{
MessageBox.Show("数据绑定Excel失败!失败原因:" + err.Message, "提示信息",
MessageBoxButtons.OK, MessageBoxIcon.Information);
return null;
}
另外,我在写Excel的时候,用Insert into语句时遇到了些问题,SQL语句看上去没错但是仍提示语法错误
经和同学讨论发现是OleDbConnection的问题,这是一个Access的SQL语句规范,我的一个列名用了Time,于是不论怎么插入都是错了……
本文介绍了在C#中进行Excel读写操作时遇到的SQL问题,特别是使用OleDbConnection执行SQL语句时,由于列名与Access关键字冲突导致的错误。通过代码示例展示了读写操作,并强调了需要注意Access SQL语句的规范,避免使用如'Time'这样的保留关键字。

被折叠的 条评论
为什么被折叠?



