2014-05-22 143 views
0

我在嘗試使用MySQL創建表時遇到錯誤。我無法弄清楚它是從哪裏來的。我認爲這可能是一個保留字「名稱」,但我改名CharName認爲這會有所幫助。任何人都有這方面的見解?創建新表時出現「SQL語法錯誤」

這裏是我的字符串:

CREATE TABLE xxx.xxx.xxx.xxx_10FEED988A06 (
    `Date` datetime NOT NULL , 
    `Guid` varchar(255) NULL , 
    `CharName` varchar(255) NULL , 
    `Server` varchar(255) NULL , 
    `CpuId` varchar(255) NULL , 
    `HardDriveId` varchar(255) NULL , 
    `MacAddress` varchar(255) NULL , 
    `IpAddress` varchar(255) NULL , 
    `MD5` varchar(255) NULL , 
    PRIMARY KEY (`Date`) 
) 

這是我的錯誤:

MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL 
syntax; check the manual that corresponds to your MySQL server version for the 
right syntax to use near '70.210.131.54_10FEED988A06 (`Date` datetime NOT NULL 
,`Guid` varchar(255) NULL' at line 1 

這裏是我的代碼:

public static void CreateNonUsersTable() 
{ 
    const string myConString = "Server=" + Server + ";" + 
           "PORT=" + Port + ";" + 
           "DATABASE=" + NonusersDataBase + ";" + 
           "Persist Security Info=No;" + 
           "Convert Zero Datetime=True;" + 
           "Encrypt=True;" + 
           "SslMode=Required;" + 
           "username=" + DbUser + ";" + 
           "password=" + DbPass + ";"; 

    string createUser = @"CREATE TABLE " + Username + " (" + 
         "`Date` datetime NOT NULL ," + 
         "`Guid` varchar(255) NULL ," + 
         "`CharName` varchar(255) NULL ," + 
         "`Server` varchar(255) NULL ," + 
         "`CpuId` varchar(255) NULL ," + 
         "`HardDriveId` varchar(255) NULL ," + 
         "`MacAddress` varchar(255) NULL ," + 
         "`IpAddress` varchar(255) NULL ," + 
         "`MD5` varchar(255) NULL ," + 
         "PRIMARY KEY (`Date`))"; 

    Logger.Write(myConString, Enums.LogType.Info); 
    Logger.Write(createUser, Enums.LogType.Info); 

    using (var conn = new MySqlConnection(myConString)) 
    { 
     conn.Open(); 
     using (var cmd = new MySqlCommand(createUser, conn)) 
     { 
      try 
      { 
       cmd.ExecuteNonQuery(); 
      } 
      catch (Exception ex) 
      { 
       Logger.Write(ex.ToString(), Enums.LogType.Exception); 
      } 
      finally 
      { 
       cmd.Dispose(); 
      } 
     } 
     conn.Close(); 
     conn.Dispose(); 
    } 
} 
+2

有點不相關:如果您的'用戶名'變量包含用戶提供的數據,那麼您可能會面臨SQLI漏洞。 – LB2

回答

1

您必須通過反引號來避免您的表名。

替代由

CREATE TABLE `xxx.xxx.xxx.xxx_10FEED988A06` 

或者更好的變化.其他一些caracters像_

CREATE TABLE xxx.xxx.xxx.xxx_10FEED988A06 

-

+0

我會這麼做的。謝謝!這是我需要的答案! –

+0

你不應該這樣做......你應該改變點_ –

1

在反引號把表名和它應該工作。因爲它們通常用於定義數據庫/表格組合(例如CREATE TABLE mydb.mytable

+0

我欣賞信息! –

2

您不能使用類似xxx.xxx.xxx.xxx_10FEED988A06這樣的名稱來創建表格。使用這些點是一種非法表達。

改爲使用下劃線_(它們用作公共約定)。他們的使用是合法的:

CREATE TABLE xxx_xxx_xxx_xxx_10FEED988A06 

請參閱SQL小提琴here