[英]Inserting in Excel sheet from another Excel sheet
我正在嘗試閱讀一個Excel工作表,然后通過OleDb創建另一個Excel工作表
在另一個Excel工作表中,我創建了一些列,例如Name char(10),Age Number
現在,當我閱讀該Excel工作表並嘗試在另一個Excel工作表中插入值時,將插入值,但其中還包含一個額外的字符,即,第一個字符是單引號(')。
為什么所有值都用單引號代替實際值? 如何擺脫它? 我為此使用c#.net。
@編輯
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.Connection = con;
cmd.CommandText = "CREATE TABLE Data1 (Name char(10), Age char(10)) ";
cmd.ExecuteNonQuery();
foreach (DataRow row in someDataTable.Rows)
{
cmd.CommandText = "INSERT INTO Data1 values ('" + row["Name"] +
"','" + row["Age"] + "')";
cmd.ExecuteNonQuery();
}
我在someDataTable中有與需要復制的Excel完全相同的數據。
這很奇怪,但是也許是OleDb嘗試了某種避免SQL注入的嘗試? (如果row["Name"]
包含單引號,該怎么辦?)即使它沒有像@Treb所說的那樣解釋,為什么也只有前導引號而沒有尾隨引號。
如果您嘗試將查詢與參數一起使用,即會發生什么:
using (OleDbCommand addLine = new OleDbCommand("INSERT INTO Data1 values (@name, @age)"))
{
addLine.Parameters.AddWithValue("@name", row["Name"]);
addLine.Parameters.AddWithValue("@age", row["Age"]);
int affectedRows = addLine.ExecuteNonQuery();
Debug.Assert(1 == affectedRows);
}
經過幾次嘗試,我仍然無法重現觀察到的行為。 我建議做幾件事:
在您的問題中張貼產生單引號問題的整個源代碼,
請嘗試以下來源(控制台應用程序),然后看看會發生什么。 就我而言,值插入正確,沒有任何前導單引號。 唯一的問題是年齡,它是作為文本而不是數字插入的(可以通過顯式指定行的類型來解決):
源代碼:
namespace Demos.StackOverflow.ExcelUpdate
{
using System;
using System.Collections.ObjectModel;
using System.Data.OleDb;
class Program
{
static void Main(string[] args)
{
// -> Change the following name of the file to use.
string fullPath = @"C:\Users\Arsene\Desktop\Book1.xlsx";
string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0'", fullPath);
Collection<Tuple<string, int>> dataToPut = new Collection<Tuple<string, int>>();
dataToPut.Add(new Tuple<string, int>("Some name", 34));
dataToPut.Add(new Tuple<string, int>("Other name here", 41));
dataToPut.Add(new Tuple<string, int>("Last one", 36));
using (OleDbConnection oleConnection = new OleDbConnection(connectionString))
{
oleConnection.Open();
using (OleDbCommand createTable = new OleDbCommand("create table Data1 (Name char(10), Age char(10))", oleConnection))
{
createTable.ExecuteNonQuery();
}
foreach (var t in dataToPut)
{
using (OleDbCommand addItem = new OleDbCommand("insert into Data1 values (@name, @age)", oleConnection))
{
addItem.Parameters.AddWithValue("@name", t.Item1);
addItem.Parameters.AddWithValue("@age", t.Item2);
addItem.ExecuteNonQuery();
}
}
}
}
}
}
我遇到了同樣的問題,插入的字段會得到一個前導的單引號。 我發現只有在使用JET 4.0庫時,當我切換到ACE 12.0庫時,問題才得以解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.