0

快速查询 OLEDB 并创建新表。在程序的一部分中,我有一个在数据库中创建新表的代码,表的名称是用户插入到文本框中的名称。对于常规单词,一切正常,但是当我尝试添加“。”、“、”、“-”或“/”时,程序会崩溃并且无法创建表格。

有什么方法可以创建表名中带有“-”或“/”的表?这种可能性非常重要

连接字符串

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C_\\.....\\robnoknjigovodstvo1.mdb";

单击按钮后正在创建表

OleDbCommand cmd4 = new OleDbCommand();
            cmd4.Connection = konekcija;
            cmd4.CommandText = "CREATE TABLE " + opis + "(ID INT IDENTITY(1,1), nazivMaterijala VARCHAR(50), jedMjera VARCHAR(50), kolicina FLOAT)";
            cmd4.ExecuteNonQuery();
4

2 回答 2

4

尝试将表名括在方括号中

  cmd4.CommandText = "CREATE TABLE [" + opis + "] (ID INT IDENTITY(1,1), ...."";

但是请记住,Microsoft 不鼓励在表名中使用特殊字符。
我认为最好为您和您的代码准备一种方法来搜索这些特殊字符并将它们替换为将来查询中更易于处理的内容。(就像一个下划线)

string ReplaceSpecialChars(string inputName)
{
    char[] verbotten = new char[] { ' ','\'', '"','\'','@','`','#','%','>','<','!','.','[',']','*','$',';',':','?','^','{','}','+','-','=','~','\\' };

    int pos = -1;
    while((pos = inputName.IndexOfAny(verbotten)) != -1)
        inputName = inputName.Substring(0, pos) + '_' + inputName.Substring(pos+1);

    return inputName;

}
于 2013-06-26T18:16:22.063 回答
1

如果此问题与连接字符串中的提供程序所建议的 Microsoft Access 相关,则这些是命名对象的规则:

命名字段、控件和对象的准则

Microsoft Access 中的字段、控件和对象的名称:最长可达 64 个字符。可以包含字母、数字、空格和特殊字符的任意组合,句点 (.)、感叹号 (!)、重音符号 (`) 和方括号 ([ ]) 除外。不能以前导空格开头。不能包含控制字符(ASCII 值 0 到 31)。不能在 Microsoft Access 项目中的表、视图或存储过程名称中包含双引号 (")。

如果您想在名称中使用任何特殊字符或空格,您应该将标识符括在括号中,[name with space]但更好的是根本不使用有问题的字符,而是尽可能替换它们。

于 2013-06-26T18:24:18.457 回答