Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DB空值转换_C#_Sql_Dbnull - Fatal编程技术网

C# DB空值转换

C# DB空值转换,c#,sql,dbnull,C#,Sql,Dbnull,我编写了一个相对较大的insert语句,其中一些字段为空 我无法将db null转换为其他类型,我也不想为每个项目都检查convert.IsDBNull 我该怎么办 System.Data.OleDb.OleDbCommand iCommand = new System.Data.OleDb.OleDbCommand("Insert into ProductCode values('" + greader["CODE"].ToString() +

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

我无法将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);
Dictionary greaderDic=new Dictionary();
foreach(greader.Items/*中的var item或您必须枚举greader*/的任何内容)
{
greaderDic.Add(item.Name,GetValue(item.Name,item.Value));//希望您有类似名称或值属性的内容
}
对象GetValue(字符串名称,objetc值)
{
if(名称、启动方式(“磁盘代码”))
返回值==null?“null”:Convert.ToChar(值)
如果(名称:STARTSWITS(“光盘PCT”))
返回值==null?“null”:Convert.ToDouble(值);
抛出新异常(“未找到“+item.Name”的映射);
}

另外,在旧代码中将所有
greader
令牌替换为
greaderDic

而不分析使用上述方法的原因,我只需编写自己的方法即可。只需编写自己的
Convert.ToChar
Convert.ToDouble
,如下所示:

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

因此,您不需要使用
Convert.ToChar(greader[“DISC\u CODE01”])
而是使用
MyConvert.ToChar(greader[“DISC\u CODE01”],“”)
。对double也执行同样的操作。

如果不在每个项目中执行,您是否希望在Convert.ToDouble和Convert.ToChar中实现它?最后,使用参数!为什么不执行类似于
Convert.ToDouble(greader[“DISC\u PCT05”])的操作??0
@justin kirk:如果您希望应用程序稳定,则需要检查空条件,如果需要,则使用存储过程,以便应用程序不会出现任何sql注入问题数据库规范化,需要使用参数。之后,你的工作应该会更容易,你将不需要检查这么多的项目。
public class MyConvert
{
    public static char ToChar(object value, char defaultValue)
    {
        return Convert.IsDBNull(value) ? defaultValue : Convert.ToChar(value);
    }
}