2011-05-21 126 views
28

我正在使用SQL將數據插入到使用C#的SQL數據庫文件中,如下所示。SQL錯誤:關鍵字'User'附近的語法不正確

String cs = System.Configuration.ConfigurationManager.ConnectionStrings["connection1"].ConnectionString; 
    SqlConnection conn = new SqlConnection(cs); 
    String sql = "INSERT INTO User (login, password, status) " + 
      "VALUES (@login, @password, @status)"; 
    SqlCommand comm = new SqlCommand(sql, conn); 

    comm.Parameters.Add("@login", System.Data.SqlDbType.VarChar); 
    comm.Parameters.Add("@password", System.Data.SqlDbType.VarChar); 
    comm.Parameters.Add("@status", System.Data.SqlDbType.Bit); 

    try 
    { 
     conn.Open(); 
     Console.WriteLine(conn.ToString()); 
     comm.ExecuteNonQuery(); 
     conn.Close(); 
     return true; 
    } 
    catch (Exception ex) 
    { 
     throw (ex); 
    } 
    finally 
    { 
     conn.Close(); 
    } 

執行命令時出現以下錯誤。

Incorrect syntax near the keyword 'User'.: INSERT INTO User (login, password, status) VALUES (@login, @password, @status)

我該如何解決這個問題?

編輯: 錯過參數附加值..

comm.Parameters["@login"].Value = this.Username; 
    comm.Parameters["@password"].Value = this._password; 
    comm.Parameters["@status"].Value = this.Status; 
+1

如何是一個C#的錯誤?聽起來像一個SQL錯誤。 – CodesInChaos 2011-05-21 14:43:33

+0

@CodeInChaos - 重新標記;更好? – 2011-05-21 14:52:36

+0

@Marc我在談論的主題不是標籤。 – CodesInChaos 2011-05-21 14:55:31

回答

64

User is a reserved keyword,所以你必須使用方括號,清楚你的意思是對象名爲「用戶」的,即使用[User]而不是User

+1

很酷。有用。 – BlueBird 2011-05-21 14:48:43

5

用戶是一個t-sql reserved keyword。將它括在方括號中可以解決這個問題。 E.g INSERT INTO [User]

3

對數據庫運行您的查詢。你可以使用declare sql關鍵字來定義你的變量並給它們賦值。如果您需要計算變量值,請在conn.Open處設置一個斷點,然後使用本地窗口查看您傳入的值。您可以使用的另一個工具是Sql Profiler。你可以開始追蹤,然後運行你的程序。在發佈的代碼運行後,您應該能夠看到在配置文件中執行的查詢。

所有這些都可以幫助你找出當你的sql出現異常時沒有提供足夠的信息。

在SQL Server Management Studio中應該突出了用戶的關鍵字在SQL語句中,可以輕鬆顯示你需要它周圍括號像這樣:[用戶]

+0

同意。當人們在SSMS之外編寫查詢時,它總是讓我感到驚訝,而這對於這一點來說是非常好的工具。尤其是如果啓用了stats-IO和actual-query-plan等選項。 – 2011-05-21 14:50:49

+0

「Sql Server Management Studio應該在你的sql語句中突出顯示用戶關鍵字,很容易表明你需要括號括起來,就像這樣:[User]」我同意這一點。或VS應該指出。 – BlueBird 2011-05-21 14:56:20

+0

@Muneer - 好的,除非你寫了一個插件,這是Visual Studio的一個不透明的字符串。 – 2011-05-21 14:58:03

相關問題