C# Command.ExecuteNonQuery();错误 “VALUE”附近的语法不正确

本文关键字:不正确 语法 VALUE ExecuteNonQuery Command 错误 | 更新日期: 2023-09-27 18:31:16

我已经尝试了很多不同的东西,我总是在我的

cmd.ExecuteNonQuery();

它把我扔了这个。

System.Data 中发生了类型为"System.Data.SqlClient.SqlException"的未处理异常.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字符串,但这也应该没问题。谁能在这里帮我?

C# Command.ExecuteNonQuery();错误 “VALUE”附近的语法不正确

它应该是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 
        }
    }
}

读取插入 (Transact-SQL)

并使用using语句来处置您的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()方法或它的重载。

阅读:我们可以停止使用 AddWithValue() 吗?