C#Command.ExecuteNonQuery();错误语法不正确' VALUE'

时间:2014-11-21 09:46:22

标签: c# sql sql-server executenonquery

我已经尝试了很多不同的东西,我一直在我的

上得到同样的错误
cmd.ExecuteNonQuery();

它抛出了我。

  

System.Data.dll中发生了未处理的“System.Data.SqlClient.SqlException”类型异常   附加信息:'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字符串,但那也应该没问题。谁能在这帮助我?

1 个答案:

答案 0 :(得分:9)

应该{​​{1}}而不是VALUES

VALUE

阅读INSERT (Transact-SQL)

并使用using statement处理您的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 } } } SqlConnection

SqlCommand

作为最佳做法,请勿使用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(); } 方法。 可能会产生意外结果。使用.Add()方法或它的重载。

阅读:Can we stop using AddWithValue() already?