此代码产生错误..“System.InvalidCastException:指定的强制转换无效。”

时间:2012-04-27 17:04:52

标签: c# asp.net

cmd1.CommandText = "SELECT distinct MbrBtch from Member where MbrStrm='"+DrpDwnStrm .SelectedItem .Text +"'";
            cmd1.Connection = con;
            DataTable Table1;
            Table1 = new DataTable("mbr");
            DataRow Row1;
            DataColumn MbrBatch = new DataColumn("MbrBatch");
            MbrBatch.DataType = System.Type.GetType("System.Int32");
            Table1.Columns.Add(MbrBatch);
            try
            {
                con.Open();
                SqlDataReader RdrMbr = cmd1.ExecuteReader();
                while (RdrMbr.Read())
                {

                    Row1 = Table1.NewRow();
                    Row1["MbrBatch"] = Convert.ToInt32(RdrMbr.GetInt32(0));
                    Table1.Rows.Add(Row1);
                }
                RdrMbr.Close();
            }

            finally
            {
                con.Close();
            }
            DrpDwnBtch.DataSource = Table1;
            this.DrpDwnBtch.DataTextField = "MbrBatch";
            DrpDwnBtch.DataBind();

//here MbrBtch is numeric type attribute of sql server. 

2 个答案:

答案 0 :(得分:1)

我的猜测是下面的行会给你一个错误。

更改行

    Row1["MbrBatch"] = Convert.ToInt32(RdrMbr.GetInt32(0));

int mbr = 0;
if (Int32.TryParse(RdrMbr[0], out mbr))
   Row1["MbrBatch"] = mbr;

答案 1 :(得分:0)

MbrBtch列中是否可能存在空值?如果是这样,你需要像这样检查null:

if (!RdrMbr.IsDBNull(0))
    Row1["MbrBatch"] = Convert.ToInt32(RdrMbr.GetInt32(0));
else
    // Set value to what it should be if null, perhaps a -1 or 0