2014-11-21 2 views
-2

오류 근처의 구문이 잘못되었습니다 '값은'내가 그것은 나를이 발생 내C# Command.ExecuteNonQuery();

cmd.ExecuteNonQuery(); 

에서 같은 오류가 계속이 서로 다른 것들의 톤을 시도했습니다. 구문이 가까운 'VALUE'

'System.Data.SqlClient.SqlException'형식의 처리되지 않은 예외가 system.data.dll 에 추가 정보를 발생.

코드 :

당신이 코멘트에서 볼 수 있듯이
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)

그리고 당신의 SqlConnectionSqlCommand을 처분하는 using statement를 사용합니다.

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?