C# 使用Excel ACE OLEDB连接创建名称中带有连字符的表

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=

是否有人在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=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”语句中所显示的那样

我希望这有帮助