【问题标题】:LINQ to SQL in silverlight exceptionSilverlight 异常中的 LINQ to SQL
【发布时间】:2012-01-03 05:42:54
【问题描述】:

这是我之前问题的延续: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) 在 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 结果:

SQL 结果:

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

【问题讨论】:

  • 什么是 InnerException?在那里您可以获得所需的详细信息。
  • 如何获得 InnerException?

标签: sql silverlight wcf linq


【解决方案1】:

当“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;
    }
}

或类似的东西。

【讨论】:

  • 谢谢,我用新的错误消息更新了我的原始帖子。
  • 我要检查的第一件事是查看 Web 服务和您的客户端代理之间是否存在不匹配。更新您的服务参考。
  • 我不认为有不匹配,因为当我从 LINQ 切换到普通 SQL 时它可以工作。 (我更新了我的开始帖子)
  • 我想确认一下,实际上返回的是相同的数据。将您的故障排除步骤集中在这两种服务器端方法之间的差异上。您大概会发现两者之间存在某种差异。
  • 有区别,但我觉得没关系? localhostr.com/file/BsIRH0B/1.jpglocalhostr.com/file/7p9jFLj/2.jpg
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多