Webmatrix asp.net网页:如果已使用DB helper,则尝试保存回数据库时出错

Webmatrix asp.net网页:如果已使用DB helper,则尝试保存回数据库时出错,webmatrix,asp.net-webpages,Webmatrix,Asp.net Webpages,我有一个if语句,它检查数据库中是否存在条目。 代码会正确检查电子邮件地址是否已存在,但如果电子邮件不存在,则会出现错误: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference at CallSite.Target(Closure , CallSite , Object ) at ASP._Page__footer_cshtml.Exe

我有一个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;
            }

在WebMatrix中检索(然后测试)数据库中的值时遇到的一件事是,根据数据库中的字段,在查询数据库并将值存储在变量“”中后,和System.DBNull.Value是三种不同的东西,检查空字符串或简单的null对我来说是抛出错误的方式,与您的示例基本相同

希望我能在这方面有所帮助(这可能不是你的问题,但我知道在类似的情况下,这让我很为难,因为我以前从未见过DBNull)

这个DBNull值从数据库传递到我将字段值分配给的变量,因为它是一个会话变量,被视为一个对象。我不确定是否仍然允许将这个DBNull值存储在正则变量中(并且不转换为正则null)。此外,我相信我当时使用的是二进制数据(图像),不确定这是否会产生影响,但

最后,对于我的代码,当检查某个字段(数据库中)是否为空、null等时,我使用了类似的内容(仅使用会话变量而不是常规变量):

我希望这有帮助

if (emailexists != "" && emailexists != null && emailexists != System.DBNull.Value)
{
    //code goes here.
}