【发布时间】:2012-03-13 03:33:12
【问题描述】:
WebService.asmx.cs
[WebMethod]
public HashSet<callInfo> getCalls(string Date, string techID)
{
HashSet<callInfo> list = new HashSet<callInfo>();
var today = Convert.ToDateTime(Date);
var tomorrow = today.AddDays(1).ToString("MM-dd-yyyy");
var comm = new SqlCommand("Select RTrim(CallNbr), RTrim(CustNmbr), RTrim(AdrsCode), RTrim(SvcDescr), RTrim(SrvStat), RTrim(Customer_Reference), Convert(Varchar, ETADTE, 101), Convert(Varchar, ETATME, 108), RTrim(Address1), RTrim(City), RTrim(State), RTrim(Zip), Left(Phone1, 3) + '-' + SubString(Phone1, 5, 3) + '-' + SubString(Phone1, 9, 4) From SVC00200 Where ETADTE In ('" + Date + "','" + tomorrow +"') And TechID = '" + techID + "' And SrvStat Between '20D' And '59Z'", SQL01);
SQL01.Open();
SqlDataReader dr = comm.ExecuteReader();
if (!dr.HasRows) { dr.Close(); SQL01.Close(); return null;}
while (dr.Read())
{
callInfo ci = new callInfo
{
callNumber = dr[0].ToString(),
customer = dr[1].ToString(),
adrsCode = dr[2].ToString(),
svcDesc = dr[3].ToString(),
srvStat = dr[4].ToString(),
poNumber = dr[5].ToString(),
etaDte = dr[6].ToString(),
etaTime = dr[7].ToString(),
address = dr[8].ToString(),
city = dr[9].ToString(),
state = dr[10].ToString(),
zip = dr[11].ToString(),
phone = dr[12].ToString()
};
list.Add(ci);
}
dr.Close();
SQL01.Close();
return list;
}
方法尝试使用该 Web 服务并从 getCalls() 填充 HashSet
private string getCalls()
{
callInfo defaultCall = new callInfo() {callNumber = "None"};
var calls = inst.getCalls(_date, _techID).DefaultIfEmpty(defaultCall).ToList();
if (calls.First().callNumber == "None")
return "None";
foreach (callInfo info in calls)
{
try
{
var SQL = string.Format("Insert Or Ignore Into Calls Values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}')", info.callNumber, info.customer, info.adrsCode, info.svcDesc, info.srvStat, info.poNumber, info.etaDte, info.etaTime, info.address, info.city, info.state, info.zip, info.phone);
new SQLite(SQL, false);
}
catch (Exception ex)
{
return "Error " + ex.Message;
}
}
return "Success";
}
var calls = inst.getCalls 抛出
“未处理的异常:System.ArgumentNullException:参数不能 无效的。参数名称:来源"
当没有调用时,webmethod 返回 null,就像它应该做的那样。但是,即使我声明了一个默认的空值,它仍然会创建空参数异常。如何处理 null 返回值?
【问题讨论】:
-
从您的 webmethod 代码中,您永远不会返回 null,但如果不是这样,您最终会调用 null.DefaultIfEmpty(...)
-
如果数据读取器没有任何行,webmethod 将返回 null。
-
是的,我明白了,现在如果这个 null 超出了您的 webmethod,那么当 inst.getCalls(_date, _techID) 为 null 时会发生什么? null.DefaultIfEmpty 不好!
标签: c# web-services null