Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值插入数据库的C代码不起作用_C#_Sql - Fatal编程技术网

C# 将值插入数据库的C代码不起作用

C# 将值插入数据库的C代码不起作用,c#,sql,C#,Sql,这是用于将这些文件插入数据库的按钮,字段名和db连接可用于任何其他任务,但不知何故,此按钮一直告诉我插入失败 private void button1_Click(object sender, EventArgs e) { try { int answer; sql = "INSERT INTO Registration VALUES (@Student_ID,@Course_ID,@Section,@Start_Date,@End_Date,@Semes

这是用于将这些文件插入数据库的按钮,字段名和db连接可用于任何其他任务,但不知何故,此按钮一直告诉我插入失败

private void button1_Click(object sender, EventArgs e)
{
    try {
        int answer;
        sql = "INSERT INTO Registration VALUES (@Student_ID,@Course_ID,@Section,@Start_Date,@End_Date,@Semester)";
        connection.Open();
        command = new SqlCommand(sql, connection);
        command.Parameters.AddWithValue("@Student_ID", comboBox1.SelectedItem.ToString());
        command.Parameters.AddWithValue("@Course_ID", lstcourse.SelectedItem.ToString());
        command.Parameters.AddWithValue("@Section", txtsection.Text);
        command.Parameters.AddWithValue("@Start_Date", txtstart.Text);
        command.Parameters.AddWithValue("@End_Date", txtend.Text);
        command.Parameters.AddWithValue("@Semester", txtsemester.Text);

        answer = command.ExecuteNonQuery();
        command.Dispose();
        connection.Close();

        MessageBox.Show("You're awesome and added " + answer + " row to your registration");
    }
    catch
    {
        MessageBox.Show("You screwed up");
    }
    /////////////////////////////////
} 



你可以试试这个代码

using(SqlConnection connection = new 
 SqlConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString))
 {
        connection.Open();
        string sql =  "INSERT INTO Table(id,name,test) 
        VALUES(@param1,@param2,@param3)";
        using(SqlCommand cmd = new SqlCommand(sql,connection)) 
        {
              cmd.Parameters.Add("@param1", SqlDbType.Int).value = val;  
              cmd.Parameters.Add("@param2", SqlDbType.Varchar, 50).value = Name;
              cmd.Parameters.Add("@param3", SqlDbType.Varchar, 50).value = Test;
              cmd.CommandType = CommandType.Text;
              cmd.ExecuteNonQuery(); 
        }
}

不知怎的,这个按钮一直告诉我插入失败了

private void button1_Click(object sender, EventArgs e)
{
    try {
        int answer;
        sql = "INSERT INTO Registration VALUES (@Student_ID,@Course_ID,@Section,@Start_Date,@End_Date,@Semester)";
        connection.Open();
        command = new SqlCommand(sql, connection);
        command.Parameters.AddWithValue("@Student_ID", comboBox1.SelectedItem.ToString());
        command.Parameters.AddWithValue("@Course_ID", lstcourse.SelectedItem.ToString());
        command.Parameters.AddWithValue("@Section", txtsection.Text);
        command.Parameters.AddWithValue("@Start_Date", txtstart.Text);
        command.Parameters.AddWithValue("@End_Date", txtend.Text);
        command.Parameters.AddWithValue("@Semester", txtsemester.Text);

        answer = command.ExecuteNonQuery();
        command.Dispose();
        connection.Close();

        MessageBox.Show("You're awesome and added " + answer + " row to your registration");
    }
    catch
    {
        MessageBox.Show("You screwed up");
    }
    /////////////////////////////////
} 


如果您能够发布catch语句中的实际错误,那将非常有用。如果您调试了例程并专门检查了错误消息,您会注意到出了什么问题

错误的主要原因是您没有提供要插入的列。如果您预先提供了所有列,那么insert语句将得到满足,并且工作正常

解决方案

或者确保在insert语句中考虑所有列。 指定要插入的列。 根据您的帖子,您的表有7列,您只提供了其中的6列。当您使用INSERT INTO TABLENAME VALUES语法时,必须为所有列提供值,而不仅仅是选择少数列

另一方面,如果使用INSERT INTO TABLENAMEcolumnName、columnNameVALUESvalue、value的语法,则通过提供两列及其值来满足要求

旁注:

查看使用以确保对象已被处置。 使用SqlParameterCollection.Add而不是AddWithValue,它必须推断数据类型,这可能会导致意外结果。 声明参数时,请指定/添加与表中的列数据类型和长度匹配的正确数据类型和长度。
修改SQL语句以包含缺少的列:

INSERT INTO Registration VALUES (@Registration_ID,@Student_ID,@Course_ID,@Section,@Start_Date,@End_Date,@Semester)
或者指定将在新行中填充的列(假设注册ID字段是自动标识符)

INSERT INTO Registration (Student_ID, Course_ID, Section, Start_Date, End_Date, Semester) VALUES (@Student_ID,@Course_ID,@Section,@Start_Date,@End_Date,@Semester)

您应该捕获异常。然后从那里获得完整的错误消息。您好,欢迎来到Stack Overflow。请花点时间访问。你可能还想读书。正如目前所写的,很难说清楚你在问什么你没有提供要插入的列。。。例如:插入到RegistrationcolumnName中,colNameValues12,12。。。如果您要添加所有列,那么您的方法应该有效。从表面上看,你不是,这就是问题所在。为什么ID是浮动的?还请注意,您正在为所有列传递字符串,并将其留给其他人来转换数据类型。我投了反对票,因为没有解释为什么会发生错误以及为什么操作代码是错误的。这如何直接解决OP问题?您只需替换字符串sql中的表名和属性以及val、名称和测试: