2014-05-17 65 views
0

我正在嘗試使用VB.net創建一個使用變量的SQL表。從名稱中帶空格的變量創建SQL表

唯一的問題是表名是文件名的派生,並且有時可能包含空格。

下面是我的代碼示例:

Dim openFileDialog1 As New OpenFileDialog 
    Dim strFileName As String 
    Dim FileNameOnly As String 

    openFileDialog1.InitialDirectory = "C:\***\***\***" 
    openFileDialog1.Filter = "CSV files (*.csv)|*.csv" 
    openFileDialog1.FilterIndex = 2 
    openFileDialog1.RestoreDirectory = True 

    If openFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then 

    End If 
    strFileName = openFileDialog1.SafeFileName 
    If strFileName <> "" Then 

     FileNameOnly = System.IO.Path.GetFileNameWithoutExtension(openFileDialog1.FileName) 
     TextBox1.Text = FileNameOnly 

Using con = New SqlConnection("server=***\SQLEXPRESS; database=***Billing; integrated security=yes") 
      Using cmda = New SqlCommand("CREATE TABLE '" + FileNameOnly + "' (CallType VarChar(30),ChargeCode VarChar(30),Destination VarChar(30),TariffUsed VarChar(30),Peak Float,OffPeak Float,Weekend Float,Setup Float,MinimumCharge Float,ChargeCap INT,InitialUnits INT,InitialCharge INT,InitialPeak INT,InitialOffPeak INT,InitialWeekend INT,BillingUnit INT,MinimumUnits INT,RateType VarChar(30));", con) 
       con.Open() 
       cmda.ExecuteNonQuery() 
       con.Close() 
      End Using 
     End Using 

...這是錯誤我得到

「附加信息:附近有語法錯誤FFA68878 CPS率'。」

的安全文件名是「FFA68878 CPS率」

任何人都可以用正確的語法幫助嗎?

任何幫助,不勝感激:)

+1

對空格或其他非字母數字字符使用變量名不是一個好習慣。你會遇到問題。很多問題。文件名可以包含句點和其他標點符號,RDBMS不能在列名中接受。而且你必須引用所有列名,因爲它們可能包含的內容。你確定你沒有其他辦法來做到這一點? – Frazz

+0

有沒有辦法從文件名中刪除空格 - 我想知道如果這將是一個更好的選擇? – user3580480

+0

當然,在vb.net中有一種方法......但它不會解決你的問題,因爲那樣你將無法區分「a b c」和「abc」。文件名對列名不太好。你遲早會遇到問題......很多問題。 – Frazz

回答

2

方括號內把你的表和列名(含空格),如

Using cmda = New SqlCommand("CREATE TABLE [" + FileNameOnly + "] (CallType . . .RateType VarChar(30));", con) 

注意。 。 。[「+ FileNameOnly +」]。 。 。上面的

+0

謝謝你,這很有效 – user3580480