我有一个if语句,用于检查我的数据库中是否存在条目。 代码正确检查是否已存在电子邮件地址,但如果电子邮件不存在,则会出现错误:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding
on a null reference at CallSite.Target(Closure , CallSite , Object ) at
ASP._Page__footer_cshtml.Execute()
但是,如果我删除了获取现有电子邮件的代码,请注意以下几行:
var getrecord = db.QuerySingle("Select Email from Registrations where email = @0", email);
emailexists = getrecord.email;
将数据保存回数据库,没有任何问题。不确定是否因为我使用相同的Db助手?
try
{
var db = Database.Open("MiniDB");
var getrecord = db.QuerySingle("Select Email from Registrations where email = @0", email);
emailexists = getrecord.email;
if (emailexists != ""){
msg = "This Email address is already registed";
saved = false;
}
else {
var insertCommand = "INSERT INTO Registrations (Email, Name, regDate) VALUES(@0, @1, @2)";
db.Execute(insertCommand, email, name, regDate);
saved = true;
}
}
catch (Exception ex)
{
msg = ex.ToString();
saved = false;
}
答案 0 :(得分:0)
在WebMatrix中检索(然后测试)我的数据库中的值时遇到的一件事是,根据数据库中的字段,查询数据库并将值存储在变量“,”,null和System中之后.DBNull.Value是三个不同的东西,并检查空字符串或简单地为我抛出错误,就像你的例子一样。
希望我能帮助解决这个问题(这可能不是你的问题,但我知道这种情况在类似的情况下困扰我很长一段时间,因为我之前从未见过DBNull。)
这个DBNull值从数据库传递到我赋予字段值的变量,因为它是一个会话变量并被视为一个对象。我不确定是否仍然允许将此DBNull值存储在常规变量中(并且不会转换为常规null)。此外,我相信我当时正在使用二进制数据(图像),不确定这是否会产生影响但是......
最后,对于我的代码,当检查一个字段(在数据库中)是空的,null等时,我使用了这样的东西(只有一个会话变量而不是你的常规变量):
if (emailexists != "" && emailexists != null && emailexists != System.DBNull.Value)
{
//code goes here.
}
我希望这有帮助!