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