C# 将值插入数据库的C代码不起作用
这是用于将这些文件插入数据库的按钮,字段名和db连接可用于任何其他任务,但不知何故,此按钮一直告诉我插入失败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
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、名称和测试: