C# 通过C将数据插入SQL Server数据库#

C# 通过C将数据插入SQL Server数据库#,c#,sql,database,C#,Sql,Database,代码如下: SqlConnection con = new SqlConnection(connectionString); string sql = "insert into student(std_year,std_faculty,std_roll,std_name) values (@year,@faculty,@roll,@name)"; //string sql = "update current_player set batsman1_name=@batsman1_name,bat

代码如下:

SqlConnection con = new SqlConnection(connectionString);
string sql = "insert into student(std_year,std_faculty,std_roll,std_name) values (@year,@faculty,@roll,@name)";

//string sql = "update current_player set batsman1_name=@batsman1_name,batsman2_name=@batsman2_name,bowler_name=@bowler_name";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.Parameters.AddWithValue("@std_year", year);
cmd.Parameters.AddWithValue("@std_faculty", faculty);

cmd.Parameters.AddWithValue("@std_roll", Convert.ToInt32(txtroll.Text));
cmd.Parameters.AddWithValue("@std_name", txtname.Text);

try
{
   con.Open();
   cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
   throw ex;
}
finally
{
   con.Close();
}

错误表示它无法识别标量变量
@year
,并表示必须声明它。有人能帮我吗?

问题是您没有定义
@year
参数

而不是这个

cmd.Parameters.AddWithValue("@std_year", year);
写这个

cmd.Parameters.AddWithValue("@year", year);

所有参数名称都是错误的。您的SQL语句包含参数
@year、@faculty、@roll、@name
,但您尝试添加名为
@std\u year
等的参数

您需要在
AddWithValue
中传递参数名称,如下所示:

cmd.Parameters.AddWithValue("@year", year);
cmd.Parameters.AddWithValue("@faculty", faculty);
cmd.Parameters.AddWithValue("@roll", Convert.ToInt32(txtroll.Text));
cmd.Parameters.AddWithValue("@name", txtname.Text);
试试这个 将参数值更改为

    cmd.Parameters.AddWithValue("@std_year", year);
    cmd.Parameters.AddWithValue("@std_faculty", faculty);
    cmd.Parameters.AddWithValue("@std_roll", Convert.ToInt32(txtroll.Text));
    cmd.Parameters.AddWithValue("@std_name", txtname.Text);
对这些

            cmd.Parameters.AddWithValue("@year", year);
            cmd.Parameters.AddWithValue("@faculty", faculty);

            cmd.Parameters.AddWithValue("@roll", Convert.ToInt32(txtroll.Text));
            cmd.Parameters.AddWithValue("@name", txtname.Text);

您必须传递与在查询中写入的参数同名的参数。

AddWithValue
@std\u year
”,但是您的查询具有
@year
(对所有其他参数重复)不是很明显吗?您将参数名称声明为
@year
,但尝试将
@std_year
添加为值。它不是year,而是@std_year std_year是我在数据库中的列名,year是winform应用程序中的值,非常感谢Rajeev Kumar先生。这解决了我的问题std_year是数据库中的我的列名,year是winform应用程序中的值,无论数据库中的列名是什么,因为您在insert语句中已使用参数
@year
映射了
std_year
。因此,您需要定义
@year
的值。代码将在您尝试时运行它的td_year是数据库中我的列名,year是来自winform应用程序的值,这与此无关。参数与字段名不同。参数名称是以
@
开头的文本。您需要将这些值传递给
AddWithValue
,而不是字段名