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

时间:2017-12-29 17:32:01

标签: c# linq dataset

我正在尝试输入数据集(在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();

        }

    }

2 个答案:

答案 0 :(得分:1)

错误告诉您确切的问题。

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

如果您使用DataTable/DataRow,则可以使用扩展程序.Field<string>("Column Name")

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

答案 1 :(得分: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
    };