通过Linq从存储过程中返回null

时间:2013-10-25 04:27:06

标签: c# stored-procedures linq-to-sql

我试图通过Web服务从LINQ到SQL从存储过程返回。但是,当我不应该这样做的时候,我会继续得到一个空结果。我不确定是什么问题。当我尝试通过Linq直接调用存储过程到SQL时,我能够成功地将结果绑定回GridView。

但是当我尝试以下代码时,它不起作用:

实际.aspx.cs:

protected void LoginUsrBtn_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("Id");
    dt.Columns.Add("Admin");
    dt.Columns.Add("Name");

    try
    {
        using (CustomWebService cws = new CustomWebService()){
            dt.Rows.Add(cws.LogInFunction("Ron", "5456"));
        }
    }
    catch
    {
        Label1.Text = "Error";
    }
}

网络服务:

  {
    DataTable dbtable = new DataTable();
    dbtable.Columns.Add("Id");
    dbtable.Columns.Add("Admin");
    dbtable.Columns.Add("Name");
    DataClassesDataContext dbcontext = new DataClassesDataContext();

    var query = (dbcontext.UserLogin(username, password)).SingleOrDefault(); 

    //returns data correctly
    if (query != null)
    {
        try
        {
                **//WHERE THE DATA DISAPPEARS:**
                dbtable.Rows.Add(query.Id, query.Admin, query.Name);
                return dbtable;
        }
        catch (Exception)
        {
            dbtable.Rows.Add(0, 0, 0);
            return dbtable;
        }

    }
    return dbtable;
}

1 个答案:

答案 0 :(得分:2)

我设法通过更改(actual .aspx.cs)

来修复它
dt.Rows.Add(cws.LogInFunction("Ron", "5456"));

为:

dt = (cws.LoginFunction("Ron", "5456"));

并且在将布尔管理员值传递到表格行之前也初始化它:

bool initializedAdmin = (query.Admin.HasValue) 
                            ? query.Admin.Value 
                            : false;
dbtable.Rows.Add(query.Id, initializedAdmin, query.Name);