我已经尝试了很多不同的东西,我一直在我的
上得到同样的错误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字符串,但那也应该没问题。谁能在这帮助我?
答案 0 :(得分:9)
应该{{1}}而不是VALUES
。
VALUE
并使用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()
方法或它的重载。