2017-05-27 227 views
3

我是C#SQL的新手。为什么SQL表名不能以数字开头?

使用下面的代码我试图创建新表,并一切顺利,因为我想但问题是:使用textBox如果我名字表开始与数字(123MytableName)它会抛出错误说“语法不正确'123MytableName '“

   using (SqlConnection MyConnection = new SqlConnection()) 
       using (SqlCommand MySQLCommand = new SqlCommand())    
      { 


       MyConnection.ConnectionString = " Data Source=localhost; Initial Catalog=TestDB ;Integrated Security=true;Max Pool Size=1024; Pooling=true"; 

       MyConnection.Open(); 

       MySQLCommand.CommandText = "CREATE TABLE "+textBox1.Text+" (Col1 int, Col2 varchar(50), Col money)"; 
       MySQLCommand.Connection = MyConnection; 
       MySQLCommand.ExecuteNonQuery(); 
      } 

我读this但它没有帮助。

任何人都知道如何修复它,所以我可以创建以数字开头的表格?

谢谢

+1

从用户直接在无任何消毒的SQL代码中使用的输入是获得安全的最好方法这些孔足以让一辆宽敞的18轮车驶过它们。 [想想鲍比表](https://xkcd.com/327/),只要你想做那样的事情。 –

+0

您无法使用表名称的参数,因此您最好研究其他一些防止SQL注入的方法。在彻底清理和验证用户输入之后,在“TBL”之前添加前缀应该足够了。 –

+0

@一些程序员老兄。是的,我知道,我只是建立一个用于学习目的的测试程序。 tnx – user8074669

回答

1

您可以通过[]包围它逃脱表的名称:

MySQLCommand.CommandText = "CREATE TABLE ["+textBox1.Text+"] (Col1 int, Col2 varchar(50), Col money)"; 
// Here ---------------------------------^-----------------^ 
+0

它的工作感谢你,但它会与“SELECT”语句工作?我的意思是如果我想从123MytableName表读取数据? – user8074669

+1

@ user8074669是的,但是你也必须在那里转义它 - '“SELECT * FROM [123MytableName] --etc ..”'。 – Mureinik

+0

@ user8074669相同的方法...从[123MytableName表] –

相关问题