0

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

1 回答 1

0

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

希望我能帮助解决这个问题(这可能不是你的问题,但我知道它在类似的情况下困扰了我很长一段时间,因为我以前从未见过 DBNull)。

这个 DBNull 值从数据库传输到我将字段值分配给的变量,因为它是一个会话变量,并且被视为一个对象。我不确定是否仍允许将此 DBNull 值存储在常规变量中(而不是转换为常规 null)。另外,我相信我当时使用的是二进制数据(图像),不确定这是否会有所不同,但是......

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

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

我希望这有帮助!

于 2012-11-06T18:00:31.343 回答