C# 使用Excel ACE OLEDB连接创建名称中带有连字符的表
是否有人在ACE OLEDB与Excel 2007工作簿的连接上成功地使用了C# 使用Excel ACE OLEDB连接创建名称中带有连字符的表,c#,excel-2007,oledb,ms-jet-ace,C#,Excel 2007,Oledb,Ms Jet Ace,是否有人在ACE OLEDB与Excel 2007工作簿的连接上成功地使用了CREATE TABLE语句,该表的名称中有连字符?我现在拥有的是 using(OleDbConnection c = new OleDbConnection()) { c.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"book.xlsx\";Extended Properties=\"Excel 12.0 Xml;HDR=
CREATE TABLE
语句,该表的名称中有连字符?我现在拥有的是
using(OleDbConnection c = new OleDbConnection())
{
c.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"book.xlsx\";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";";
c.Open();
using(OleDbCommand cmd = c.CreateCommand())
{
cmd.CommandText = "CREATE TABLE [EN-GB] ([Brand] TEXT,[Text] TEXT, [SortOrder] TEXT, [Image] TEXT);";
cmd.ExecuteNonQuery();
}
}
表名是区域设置,因此需要连字符(我之所以需要连字符,是因为输出工作簿已导入到SQL Server实例中,并且表必须符合该数据库的架构)。使用上述代码会导致工作表名为“EN_GB”。其他尝试使用各种引号或反勾号的结果可能是相同的,也可能是Excel打开时恢复的工作簿
我意识到我可以稍后打开工作簿并重命名工作表名称,但我希望SQL语句中有一些内容可以更改。我创建了一个静态方法,并使用所有表名和列名调用该方法。我将字符串传递给该方法,它用下划线“\ux”替换我在数组中指定的任何字符:
internal static string SafeName(string text) {
if (!String.IsNullOrEmpty(text)) {
const string array = "~`!@#$%^&*()-[]{}\\|<>,.;'\":/?";
for (int i = 0; i < array.Length; i++) {
text = text.Replace(array[i], '_');
}
return text;
}
throw new NullReferenceException();
}
内部静态字符串安全名称(字符串文本){
如果(!String.IsNullOrEmpty(text)){
常量字符串数组=“~`.@$%^&*()-[]{}\\\\\\,.;'\”:/;
for(int i=0;i
我很少使用任何硬编码的SQL,就像您在上面的“CREATE”语句中所显示的那样
我希望这会有所帮助。我创建了一个静态方法,并使用我所有的表名和列名调用它。我将字符串传递给该方法,它将用下划线“\ux”替换我在数组中指定的任何字符:
internal static string SafeName(string text) {
if (!String.IsNullOrEmpty(text)) {
const string array = "~`!@#$%^&*()-[]{}\\|<>,.;'\":/?";
for (int i = 0; i < array.Length; i++) {
text = text.Replace(array[i], '_');
}
return text;
}
throw new NullReferenceException();
}
内部静态字符串安全名称(字符串文本){
如果(!String.IsNullOrEmpty(text)){
常量字符串数组=“~`.@$%^&*()-[]{}\\\\\\,.;'\”:/;
for(int i=0;i
我很少使用任何硬编码的SQL,就像您在上面的“CREATE”语句中所显示的那样
我希望这有帮助