The problem was reported that the database was raising an error under peak load whenever a payment service was unavailable.
The database error was:
Procedure or function 'Foo' expects parameter '@Name', which was not supplied.
After some digging it transpires that the error was due to a little gotcha in the database access code.
The code was similar to:
using (var connection = new SqlConnection("Server=localhost;Database=TestDatabase;Integrated Security=SSPI"))
{
connection.Open();
using (var cmd = new SqlCommand())
{
cmd.Connection = connection;
cmd.CommandText = "Foo";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(
new SqlParameter
{
ParameterName = "@Name",
SqlDbType = SqlDbType.NVarChar,
Size = 255,
Value = results.Reference
}
);
cmd.ExecuteNonQuery();
}
}
If results.Reference is a .NET null reference, then the SqlParameter is NOT added. In this scenario if you want to add a NULL database value then you would need to modify the code to:
Value = results.Reference ?? DbNull.Value;
No comments:
Post a Comment