2017-12-29 20 views
0

Ich probiere typisierte Datasets (in einem Webformular) aus. Jedoch habe ich den Fehler:Das Objekt vom Typ 'SystemDBNull' konnte nicht umgewandelt werden Fehler bei der Verwendung des typisierten Datasets

"Unable to cast object of type 'System.DBNull' to type 'System.String'." 

und die Quellfehler:

Line 718:    get { 
Line 719:     try { 
Line 720:      return ((string)(this[this.tableCustomers.ContactNameColumn])); 
Line 721:     } 
Line 722:     catch (global::System.InvalidCastException e) { 

Mein Code wie folgt:

protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!IsPostBack) 
     { 
      DataSet1TableAdapters.CustomersTableAdapter cusAdapter = new DataSet1TableAdapters.CustomersTableAdapter(); 
      DataSet1.CustomersDataTable customersDataTable = new DataSet1.CustomersDataTable(); 
      cusAdapter.Fill(customersDataTable); 

      Session["CustomerDataTable"] = customersDataTable; 

      GridView1.DataSource = from x in customersDataTable select new { x.ContactName, x.ContactTitle }; 
      GridView1.DataBind(); 

     } 

    } 
+0

dabei helfen können: https://stackoverflow.com/q/25860241/578411 – rene

Antwort

1

Der Fehler Sie das genaue Problem erzählt.

Sie versuchen, eine Nullspalte in eine Zeichenfolge zu konvertieren.

Wenn Sie DataTable/DataRow verwenden, dann können Sie nur die Erweiterung verwenden .Field<string>("Column Name")

oder tun string result = value == DBNull?null:(string) value;

0

Die TypedDataset erzeugt eine Hilfsmethode für jedes Feld so dass Sie ihren Wert prüfen, ob DBNULL ist. In Ihrem Fall können Sie sie wie folgt verwenden, vorausgesetzt, Contactnullable ist auch:

GridView1.DataSource = from x in customersDataTable 
    select new { 
     ContactName = x.IsContactNameNull() ? "<no name>" : x.ContactName, 
     ContactTitle = x.IsContactTitleNull() ? "<no title>" : x.ContactTitle 
    }; 
Verwandte Themen