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

时间:2012-08-16 13:09:25

标签: 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.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;
            }

1 个答案:

答案 0 :(得分:0)

在WebMatrix中检索(然后测试)我的数据库中的值时遇到的一件事是,根据数据库中的字段,查询数据库并将值存储在变量“,”,null和System中之后.DBNull.Value是三个不同的东西,并检查空字符串或简单地为我抛出错误,就像你的例子一样。

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

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

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

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

我希望这有帮助!