Question

I have written a relatively big insert statement, and some of the fields are null.

I cannot convert from db null to other types and I don't really want to check Convert.IsDBNull for every single item

What should I do?

 System.Data.OleDb.OleDbCommand iCommand = new System.Data.OleDb.OleDbCommand("Insert into ProductCode values('" +
                    greader["CODE"].ToString() +
                    "','" + Convert.ToChar(greader["DISC_CODE01"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE02"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE03"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE04"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE05"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE06"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE07"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE08"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE09"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE10"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE11"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE12"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE13"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE14"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE15"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE16"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE17"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE18"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE19"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE20"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE21"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE22"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE23"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE24"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE25"]) +
                    "','" + Convert.ToChar(greader["DISC_CODE26"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT01"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT02"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT03"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT04"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT05"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT06"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT07"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT08"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT09"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT10"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT11"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT12"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT13"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT14"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT15"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT16"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT17"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT18"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT19"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT20"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT21"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT22"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT23"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT24"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT25"]) +
                    "','" + Convert.ToDouble(greader["DISC_PCT26"]) +
                    "')", iConnect);
Was it helpful?

Solution

Without analysing why you're using the above method, I'd simply write my own method to do this. Simply write your own Convert.ToChar and Convert.ToDouble, something like this:

public class MyConvert
{
    public static char ToChar(object value, char defaultValue)
    {
        return Convert.IsDBNull(value) ? defaultValue : Convert.ToChar(value);
    }
}

So rather than having a Convert.ToChar(greader["DISC_CODE01"]) you would use MyConvert.ToChar(greader["DISC_CODE01"], ''). Do the same for double as well.

OTHER TIPS

Dictionary<string, object> greaderDic = new Dictionary<string,object>();
foreach(var item in greader.Items/*or whatever you have to enumerate your greader*/)
{
greaderDic.Add(item.Name, GetValue(item.Name, item.Value));// hope you have something like Name or Value properties
}

object GetValue(string name, objetc value)
{

if (name.StartsWith("DISC_CODE"))
return value == null? "NULL" : Convert.ToChar(value)

if (name.StartsWith("DISC_PCT"))
return value == null? "NULL" : Convert.ToDouble(value);

throw new Exception("Mapping not found for " + item.Name);

}

Additionally replace in old code all greader tokens by greaderDic

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top