LINQ to SQL中的silverlight异常

时间:2011-11-21 18:30:13

标签: sql silverlight wcf linq

这是我上一个问题的延续:Could not find an implementation of the query pattern

现在我设法查询我的数据库,我似乎无法获取我的网页上的内容。

我尝试使用以下代码返回代码:

private void button1_Click(object sender, RoutedEventArgs e)
{
    Service1Client client = new Service1Client();

    client.GetPersoonByIDCompleted += new EventHandler<GetPersoonByIDCompletedEventArgs>(client_GetPersoonByIDCompleted);
    client.GetPersoonByIDAsync("1");
}

void client_GetPersoonByIDCompleted(object sender, GetPersoonByIDCompletedEventArgs e)
{
    if (e.Error != null)
        textBox1.Text = e.Error.ToString();
    else
        label1.Content = e.Result.Voornaam.ToString();
}

然而,当我按下按钮时,我收到以下错误:

  

对象引用未设置为对象的实例。

     

在   SilverlightApplication1.MainPage.client_GetPersoonByIDCompleted(对象   发件人,GetPersoonByIDCompletedEventArgs e)at   SilverlightApplication1.ServiceReference1.Service1Client.OnGetPersoonByIDCompleted(对象   状态)

奇怪的是,当我不使用LINQ时,它可以工作,但是正常的SQL。

    string sql = "SELECT ID, naam, voornaam, leeftijd FROM tblPersoon WHERE id=@pmID";
    Persoon pers = null;
    string connstr = ConfigurationManager.ConnectionStrings["connDB"].ConnectionString;

    using (SqlConnection cn = new SqlConnection(connstr))
    {
        SqlCommand com = new SqlCommand(sql, cn);
        com.Parameters.AddWithValue("pmID", id);
        cn.Open();
        SqlDataReader reader = com.ExecuteReader();
        if (reader.Read())
        {
            pers = new Persoon();
            pers.ID = reader.GetString(0);
            pers.Naam = reader.GetString(1);
            pers.Voornaam = reader.GetString(2);
            pers.Leeftijd = reader.GetInt32(3);
        }
    }

    return pers;
}

LINQ结果:

LINQ

SQL结果:

SQL

感谢您的帮助,我非常感谢! 托马斯

1 个答案:

答案 0 :(得分:2)

通过尝试在无效时引用“e.Result”属性,即方法调用返回异常而不是值时,可以获得该特定异常。在引用e.Result之前,请确认e.Error == null,如果不是,请沉迷于某些错误处理或消息代码,例如:

void client_GetPersoonByIDCompleted(object sender, GetPersoonByIDCompletedEventArgs e)
{
    if (e.Error != null)
    {
        MessageBox.Show("An error occurred: " + e.Error.ToString());
    }
    else
    {
        label1.Content = e.Result;
    }
}

或类似的东西。