patterncsharpModerate
Inserting a DBNull value into a database
Viewed 0 times
intovaluedatabasedbnullinserting
Problem
I have code which works pretty well. I just need some of your opinions on how to write it better with fewer line of code. I want to use a ternary operator but I couldn't make it work so I did an
Basically, I want to insert a price on my database. The price column is a nullable decimal. Even in my C# code, it's a nullable decimal as well.
Can this be written without the
if else instead.Basically, I want to insert a price on my database. The price column is a nullable decimal. Even in my C# code, it's a nullable decimal as well.
if (items.Price == null)
{
SqlParameter[] p =
{
new SqlParameter("@purchaseorder", items.PurchaseOrderItems),
new SqlParameter("@modelnumber", items.ModelNumber),
new SqlParameter("@quantity", items.Quantity),
new SqlParameter("@Price", DBNull.Value),
new SqlParameter("@Description", items.Description),
new SqlParameter("@OrderNumber", items.OrderNumber),
new SqlParameter("@Unit", items.Unit)
};
i = Dal.ExecuteNonQuery(sql,p);
}
else
{
SqlParameter[] p =
{
new SqlParameter("@purchaseorder", items.PurchaseOrderItems),
new SqlParameter("@modelnumber", items.ModelNumber),
new SqlParameter("@quantity", items.Quantity),
new SqlParameter("@Price", items.Price),
new SqlParameter("@Description", items.Description),
new SqlParameter("@OrderNumber", items.OrderNumber),
new SqlParameter("@Unit", items.Unit)
};
i = Dal.ExecuteNonQuery(sql,p);
}
return i;Can this be written without the
else block?Solution
The most terse and declarative way to write this is to use C#'s
The expression here will either return the non-null value of the left operand (
If you hadn't guessed, the
?? operator. Your line becomes:new SqlParameter("@Price", (object)items.Price ?? DbNull.Value),The expression here will either return the non-null value of the left operand (
items.Price), or return the operand to the right instead.If you hadn't guessed, the
?? operator is basically syntactic sugar for if operl != null ? operl : operr.Code Snippets
new SqlParameter("@Price", (object)items.Price ?? DbNull.Value),Context
StackExchange Code Review Q#143759, answer score: 11
Revisions (0)
No revisions yet.