Reputation: 9
I am getting error on updating database in C#. Here is the code:
string connectionstring = "server=AMAN;database=student;Integrated Security=True";
SqlConnection conn;
string Admission_no = txtAddmissionNo.Text;
SqlCommand cmd;
conn = new SqlConnection(connectionstring);
conn.Open();
string query = "update fees set prospectues_fee=@prospectues_fee, registration_fee=@registration_fee,admission_fee=@admission_fee ,security_money=@security_money,misslaneous_fee=@misslaneous_fee,development_fee=@development_fee,transport_fair=@transport_fair,computer_fee=@computer_fee ,activity=@activity,hostel_fee=@hostel_fee,dely_fine=@dely_fine,back_dues=@back_dues,tution_feemonth=@tution_feemonth ,tution_fee=@tution_fee,other_fee=@other_fee,total=@total,deposit=@deposit,dues=@dues where Admission_no=@Admission_no";
cmd=new SqlCommand(query,conn);
cmd.Parameters.AddWithValue("@Admission_no", Admission_no);
cmd.Parameters.AddWithValue("@prospectues_fee", prospectues_fee);
cmd.Parameters.AddWithValue("@registration_fee", registration_fee);
cmd.Parameters.AddWithValue("@admission_fee", admission_fee);
cmd.Parameters.AddWithValue("@security_money", security_money);
cmd.Parameters.AddWithValue("@misslaneous_fee", misslaneous_fee);
cmd.Parameters.AddWithValue("@development_fee", development_fee);
cmd.Parameters.AddWithValue("@transport_fair", transport_fair);
cmd.Parameters.AddWithValue("@computer_fee", computer_fee);
cmd.Parameters.AddWithValue("@activity", activity);
cmd.Parameters.AddWithValue("@hostel_fee", hostel_fee);
cmd.Parameters.AddWithValue("@dely_fine", dely_fine);
cmd.Parameters.AddWithValue("@back_dues", back_dues);
cmd.Parameters.AddWithValue("@tution_fee", tution_fee);
cmd.Parameters.AddWithValue("@other_fee", other_fee);
cmd.Parameters.AddWithValue("@total", total);
cmd.Parameters.AddWithValue("@tution_feemonth", tution_feemonth);
cmd.Parameters.AddWithValue("@deposit", deposit_fee);
cmd.Parameters.AddWithValue("@dues", dues);
cmd = new SqlCommand(query, conn);
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
Error is @prospectues_fee
scalar must be declared, which I have already declared.
Upvotes: 1
Views: 78
Reputation: 1062745
The error is simpler than I thought:
cmd = new SqlCommand(query, conn);
... // lots of code
cmd = new SqlCommand(query, conn);
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
You are creating a second command just prior to executing it; this second command has the text but no parameters. Remove this second new SqlCommand
line.
This sounds like the dreaded null
vs DBNull
issue. null
in a parameter means "don't send this". Which is really really silly, but there we are. Try with:
cmd.Parameters.AddWithValue("@prospectues_fee",
((object)prospectues_fee) ?? DBNull.Value);
now repeat for all of the parameters... or just add a method that loops over them and checks them:
static void FixTheCrazy(DbCommand command) {
foreach(DbParameter param in command.Parameters) {
if(param.Value == null) param.Value = DBNull.Value;
}
}
Alternatively, use a tool like dapper that will do it for you:
using(varconn = new SqlConnection(connectionstring))
{
conn.Execute(query, new {
Admission_no, prospectues_fee, registration_fee, ...
deposit_fee, dues });
}
Upvotes: 4