1

有没有人成功地使用CREATE TABLEACE OLEDB 连接到 Excel 2007 工作簿的语句,其中表的名称中有连字符?我现在拥有的是

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 语句中更改一些内容。

4

1 回答 1

1

我有一个静态方法,我创建并调用了我所有的表名和列名。我将字符串传递给该方法,它会用下划线“_”替换我在数组中指定的任何字符:

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();
}

我很少使用您在上面的“CREATE”语句中显示的任何硬编码 SQL。

我希望这有帮助。

于 2012-05-17T13:56:45.460 回答