【问题标题】:getting error "Object Reference not set to an instance of an object" Linq to SQL Database Insret a XML file As VarBinary收到错误“对象引用未设置为对象的实例”Linq to SQL Database Insret a XML file As VarBinary
【发布时间】:2017-04-24 10:40:13
【问题描述】:

我遇到了错误

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

public static void SaveDashboardStream(string connectionString, MemoryStream ms)
{
  using (DashboardDBConDataContext db = new DashboardDBConDataContext(connectionString))
   {
     DBDashboard storedDashboard = (from t in db.Dashboards
                                               select t).FirstOrDefault();
     ms.Seek(0, SeekOrigin.Begin);
     storedDashboard.DashboardStream = new Binary(ms.ToArray());
     db.SubmitChanges();
  }
}

我在函数 As 中使用上述代码

private void DashBoardGenerator_DashboardSaving(object sender, DashboardSavingEventArgs e)
{
  // Determines whether the user has called the Save command.
  if (e.Command == DashboardSaveCommand.Save) 
  {
     try
     {
       using (MemoryStream saveStream = new MemoryStream())
       {
         Dashboard.SaveToXml(saveStream);
         DashboardSql.SaveDashboardStream(dashboardStorageConnectionString, saveStream);
       }
       e.Handled = true;
     }
     catch (Exception ex)
     {
      XtraMessageBox.Show(ex.Message, "Unable to Save Dashboard", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
  } 
}

如果我哪里错了,请指导?

【问题讨论】:

  • 您在哪一行得到了这个异常?您可以从堆栈跟踪中检查它。

标签: c# sql linq-to-sql linq-to-xml


【解决方案1】:

可能storedDashboard 似乎为空。

using (DashboardDBConDataContext db = new DashboardDBConDataContext(connectionString))
{
     DBDashboard storedDashboard = (from t in db.Dashboards
                                    select t).FirstOrDefault();

     //Always check for null when selecting First() or FirstOrDefault()
     if(storedDashboard == null) {
        storedDashboard = new DBDashboard();
     }

     ms.Seek(0, SeekOrigin.Begin);
     storedDashboard.DashboardStream = new Binary(ms.ToArray());
     db.SubmitChanges();
}

【讨论】:

  • 是的,你是绝对正确的,但为什么流没有获取数据,因为我将它从 xml 存储到流。
  • 我不认为saveStream 有任何东西,一旦你这样做using (MemoryStream saveStream = new MemoryStream()),你应该给它分配一些价值。
  • 我发现问题基本上在这里“MyDashboard storedDashboard = (from t in db.Dashboards select t).FirstOrDefault();”你能告诉我正确的语法是什么,因为我在数据库“ID(身份),名称,文件”中有 3 个字段
  • 您是否具有查找特定仪表板的位置条件?如果您需要某个字段值,那么(from t in db.Dashboards select t.Name).FirstOrDefault()
  • 感谢您添加 db.storedDashboard.InsertOnSubmit(storedDashboard);
猜你喜欢
  • 2013-09-11
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多