DB Null conversion

本文关键字:conversion Null DB | 更新日期: 2023-09-27 18:28:18

我写了一个相对较大的insert语句,其中一些字段为null。

我无法从db null转换为其他类型,我也不想检查convert.IsDBNull中的每一项

我该怎么办?

 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);

DB Null conversion

如果不分析使用上述方法的原因,我只需编写自己的方法即可。只需编写自己的Convert.ToCharConvert.ToDouble,类似于以下内容:

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

因此,与其使用Convert.ToChar(greader["DISC_CODE01"]),不如使用MyConvert.ToChar(greader["DISC_CODE01"], '')。替身也要这样做。

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);
}

此外,用greaderDic 替换旧代码中的所有greader令牌