2017-05-27 73 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表] –

相關問題