是否有人在ACE OLEDB连接上成功使用CREATE TABLE
语句到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语句中更改某些内容。
答案 0 :(得分: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。
我希望这会有所帮助。