使用类型化数据集时,无法转换“SystemDBNull”类型的对象错误

问题描述 投票:0回答:2

我正在尝试输入数据集(在webform中)。但是我得到错误:

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

和源错误:

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

我的代码如下:

    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();

        }

    }
c# linq dataset
2个回答
1
投票

该错误告诉您确切的问题。

您正在尝试将空列转换为字符串。

如果您使用的是DataTable/DataRow,那么您可以使用扩展名.Field<string>("Column Name")

或做string result = value == DBNull?null:(string) value;


0
投票

TypedDataset为每个字段生成一个辅助方法,允许您检查其值是否为DbNull。在您的情况下,您可以按如下方式使用它们,假设ContactTitle也可以为空:

GridView1.DataSource = from x in customersDataTable 
    select new { 
        ContactName = x.IsContactNameNull() ? "<no name>" : x.ContactName, 
        ContactTitle = x.IsContactTitleNull() ? "<no title>" : x.ContactTitle
    };
© www.soinside.com 2019 - 2024. All rights reserved.