2011-10-18 69 views
0

可能重複:
OLEDB, Writing Excel cell without leading apostropheOLEDB Excel中單引號錯誤

我使用這個代碼:

System.Data.OleDb.OleDbConnection MyConnection; 
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand(); 
string sql = null; 
MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\test_excel.xls';Extended Properties=Excel 8.0;"); 
MyConnection.Open(); 
myCommand.Connection = MyConnection; 

sql = "CREATE TABLE EmployeeData (Id char(255), Name char(255), BirthDate date)"; 
myCommand.CommandText = sql; 
myCommand.ExecuteNonQuery(); 

sql = "INSERT INTO EmployeeData (Id, Name, BirthDate) values ('AAA', 'Andrew', '12/4/1955')"; 
myCommand.CommandText = sql; 
myCommand.ExecuteNonQuery(); 

MyConnection.Close(); 

代碼的作品,但我的問題是單引號(見下圖)

如何解決?

example of problem http://www.freeimagehosting.net/newuploads/e32f9.jpg

+0

這是「通過設計」行爲強制字符串類型 - 我不認爲你可以避免它。怎麼樣創建純文本'.csv'文件呢? –

回答

0

你應該總是使用參數化查詢。它們可以安全地防止注入,特殊字符並使您的代碼更具可讀性。

OleDbCommand cm = MyConnection.CreateCommand(); 
cm.CommandText = "INSERT INTO EmployeeData (Id, Name, BirthDate) values (@Id, @Name, @BirthDate)"; 
cm.Parameters.AddWithValue("@Id", "AAA"); 
cm.Parameters.AddWithValue("@Name", "'Andrew"); 
cm.Parameters.AddWithValue("@BirthDate", new DateTime(1955, 4, 12)); 
cm.ExecuteNonQuery(); 
+0

魯本斯法里亞斯感謝您的代碼,但我不想單引號,我的代碼每個單元格插入單引號,如何解決? – Chicharito

+0

對不起,我不明白;你能否更新你的問題? –

0

你試圖改變

('AAA', 'Andrew', '12/4/1955') 

("AAA", "Andrew", "12/4/1955") 

+0

我試過你的代碼,但沒有奏效 – Chicharito