2014-05-17 36 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