2014-11-21 21 views
-2

我試過一噸的不同的東西這一點,我一直讓我的C#Command.ExecuteNonQuery();錯誤附近有語法錯誤「VALUE」

cmd.ExecuteNonQuery(); 

相同的錯誤,則拋出了我這個。

類型「System.Data.SqlClient.SqlException」未處理的異常出現在system.data.dll 其他信息:附近有語法錯誤「VALUE」。

代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 

namespace Server_Testing 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string conString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString; 
      SqlConnection con = new SqlConnection(conString); 

      con.Open(); 

      SqlCommand cmd = new SqlCommand("INSERT INTO Test (Id, Name) VALUE (@Id, @Name)", con); 

      if(con.State == ConnectionState.Open) 
      { 
       //cmd.Parameters.Add(new SqlParameter("@Id", 1)); 
       //cmd.Parameters.Add(new SqlParameter("@Name", "MyName")); 
       //cmd.Parameters.AddWithValue("@Id", 1); 
       //cmd.Parameters.AddWithValue("@Name", SqlDbType.NVarChar).Value = "MyName"; 
       cmd.Parameters.AddWithValue("@Id", 1); 
       cmd.Parameters.AddWithValue("@Name", "Myname"); 

       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
} 

正如您從註釋中看到的,我已經嘗試了一些東西,但如果我的作品,我似乎無法得到它的權利不,它必須是SQL字符串,但這應該也很好..任何人都可以幫助我嗎?

回答

9

它應該是VALUES而不是VALUE

INSERT 
{ 
     [ TOP (expression) [ PERCENT ] ] 
     [ INTO ] 
     { <object> | rowset_function_limited 
      [ WITH (<Table_Hint_Limited> [ ...n ]) ] 
     } 
    { 
     [ (column_list) ] 
     [ <OUTPUT Clause> ] 
     { VALUES ({ DEFAULT | NULL | expression } [ ,...n ]) [ ,...n  ] 
     | derived_table 
     | execute_statement 
     | <dml_table_source> 
     | DEFAULT VALUES 
     } 
    } 
} 

INSERT (Transact-SQL)

並使用using statement處置您的SqlConnectionSqlCommand

using(SqlConnection con = new SqlConnection(conString)) 
using(SqlCommand cmd = con.CreateCommand()) 
{ 
    cmd.CommandText = "INSERT INTO Test (Id, Name) VALUES (@Id, @Name)"; 
    cmd.Parameters.Add("@Id", SqlDbType.Int).Value = 1; 
    cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = "Myname"; 
    // I assumed your column types are Int and NVarChar 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
} 

作爲最佳實踐,請不要使用AddWithValue方法。它可能產生意想不到的結果。使用.Add()方法或它的重載。

閱讀:Can we stop using AddWithValue() already?