2013-08-29 34 views
0

我有一个困境,我需要帮助。方法TAXCheckControlNumberForAccuracy进入数据库并使用传入的变量执行Select *语句。过滤或过载方法

但是,每次程序运行时,这些变量中的任何一个都可能为空。所有可能都是空的。没有可能是空的。 (我使用OCR获取变量..所以它并不总是准确的)

有人可以给我一些洞察力,以解决这个问题的最佳途径。

if ((City != null) && (Zip != null) && (State != null) && (Owner != null)) 
      { 
       if (City.Length > 4) 
       { 
        ControlNumberMatch = TAXCheckControlNumberForAccuracy(Owner, Zip, State, City); 
       } 
      } 
+1

究竟是什么问题?您已经检查过它们是否为空,因此您不应该选中该数据库。 – Ian

+0

@丹尼尔对其中一个答案说得最好“他的问题在于他有四个变量,但是有一部分,全部或者没有可能是空的,但他总是有这四个变量。” ....我想每次运行这个方法,但是我明白一些变量会根据可用的信息而改变。 – MaylorTaylor

回答

1

无论你做什么,你仍然需要单独检查每个参数。创建一个这样的方法。

void string CorrectParam(string param) 
{ 
    if (param == null) 
     return "default"; 
    return param; 
} 

void TAXCheckControlNumberForAccuracy(string City, string Zip, string State, string Owner) 
{ 
} 

//call using this 
TAXCheckControlNumberForAccuracy(CorrectParam(City), CorrectParam(Zip), CorrectParam(State), CorrectParam(Owner)); 
+0

这对我帮助最大。我在有问题的方法中添加了一块。 if((_zip ==“default”)||(_state ==“default”)||(_city ==“default”)) { return null; }' – MaylorTaylor

+0

这样,如果'CorrectParam()'将变量更改为'default',那么该方法将返回null。因为否则一旦它试图在'taxcheckcontrolnumberforaccuracy()'内运行OleDb查询就会失败@ – MaylorTaylor

+0

@MaylorTaylor如果你用这种方式检查每个参数,你能不能只检查它们是否为“== null”? –

2

您可以使用方法optional parameters。像

public void TAXCheckControlNumberForAccuracy(string Owner = "default", 
     string Zip = "default",string State = "default",string City = "default"); 
+0

这将如何帮助?可选参数是*编译时*功能。 –

+0

@DanielHilgarth我从OP问题中得到的理解是他想将可选参数传递给方法。 – Ehsan

+0

在这种情况下,您误解了这个问题。他的问题是他有四个变量,但有些,全部或没有可以为空。但他总是有这四个变数。只有当您不传递该参数的值时,才会使用可选参数的默认值。即使你传递的变量是'null',你仍然会传递一个值,所以默认值永远不会被使用:'TAXCheckControlNumberForAccuracy(null,null,null,null); //不会使用默认值。' –