无法使用“。”创建表。表名中的“,”“/”“ - ”

时间:2013-06-26 18:04:00

标签: c# ms-access oledb

快速查询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();

2 个答案:

答案 0 :(得分:4)

尝试将表名括在方括号中

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

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

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;

}

答案 1 :(得分:1)

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

  

命名字段,控件和对象的指南

     

Microsoft Access中的字段,控件和对象的名称:可以启动   长度为64个字符。可以包括任何字母组合,   除句点(。),a之外的数字,空格和特殊字符   感叹号(!),重音符号(`)和括号([])。不能   从领先的空间开始。不能包含控制字符(ASCII   值0到31)。不能包含双引号(“)   Microsoft Access项目中的表,视图或存储过程名称。

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