我想做网上购物系统,但运行就出现这种错误,请各位兄弟是什么原因
源错误: 
行 118: {
行 119: DataRow r = dt.NewRow();
行 120: r[0] = Convert.ToInt32(ds1.Tables[0].Rows[i]["ID"]);
行 121: r[1] = ds1.Tables[0].Rows[i]["Sort"].ToString();
行 122: r[2] = Convert.ToInt32(ds1.Tables[0].Rows[i]["ProductID"]);
 源文件: c:\inetpub\wwwroot\webapplicationdlh21\wsgw\gouwuche.aspx.cs    行: 120 堆栈跟踪: 
[InvalidCastException: 对象不能从 DBNull 转换为其他类型。]
   System.DBNull.System.IConvertible.ToInt32(IFormatProvider provider) +48
   System.Convert.ToInt32(Object value) +36
   WebApplicationDlh21.Wsgw.Gouwuche.dtBind() in c:\inetpub\wwwroot\webapplicationdlh21\wsgw\gouwuche.aspx.cs:120
   WebApplicationDlh21.Wsgw.Gouwuche.dgGouwucheBind() in c:\inetpub\wwwroot\webapplicationdlh21\wsgw\gouwuche.aspx.cs:100
   WebApplicationDlh21.Wsgw.Gouwuche.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\webapplicationdlh21\wsgw\gouwuche.aspx.cs:65
   System.Web.UI.Control.OnLoad(EventArgs e) +67
   System.Web.UI.Control.LoadRecursive() +35
   System.Web.UI.Page.ProcessRequestMain() +731 

解决方案 »

  1.   

    gouwuche.aspx.cs 的具体源码是:using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Security.Cryptography; 
    using System.Web.Security;
    using System.Text;namespace WebApplicationDlh21.Wsgw
    {
    /// <summary>
    /// Gouwuche 的摘要说明。
    /// </summary>
    public class Gouwuche : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Label lblNum;
    protected System.Web.UI.WebControls.DataGrid dgGouwuche;

    private void Page_Load(object sender, System.EventArgs e)
    {
    if(Session["RegName"] == null || Convert.ToString(Session["RegName"]) == "")
    {
    Response.Write("<script>alert('对不起,您还没登录!');window.location='Index.aspx';</script>");
    } if(!IsPostBack)
    {
    if(Request["ID"] == "" || Request["ID"] == null)
    {
    dtBind(); if(dgGouwuche.Items.Count == 0)
    {
    Response.Write("<script>alert('购物车已清空,请继续购物!');window.location = 'Index.aspx'</scirpt>");
    }
    }
    else
    {
    Db.Products myProducts = new Db.Products();
    SqlDataReader dr = myProducts.drWhereID(Convert.ToInt32(Request["ID"]));
    if(dr.Read())
    {
    Session["ProName"] = dr.GetString(1); bool mIsChar = true;//是否是字符。
    foreach(char c in dr.GetString(7))
    {
    if(!Char.IsDigit(c))
    {
    mIsChar = false;
    break;
    }
    } if(mIsChar == true)
    {
    Session["RetailPrice"] = dr.GetString(7);
    dgGouwucheBind();
    }
    else
    {
    Session["RetailPrice"] = "0";
    Response.Write("<script>alert('价格非数字,不能进行交易!');history.back(-1);</script>");
    }
    }
    }
    }
    } private void dgGouwucheBind()
    {
    Db.Temp myTemp = new Db.Temp();
    DataSet ds = myTemp.dsSelWhereRegNameProductID(Convert.ToString(Session["RegName"]),Convert.ToInt32(Request["ID"]));

    if(ds.Tables[0].Rows.Count == 0)
    {
    ArrayList a = new ArrayList();
    a.Add(Convert.ToString(Session["RegName"]));
    a.Add(Convert.ToInt32(Request["ID"]));
    a.Add(1);
    a.Add(Request["Sort"]);
    myTemp.add(a);
    }
    else
    {
    ArrayList b = new ArrayList();
    b.Add(Convert.ToString(Session["RegName"]));
    b.Add(Convert.ToInt32(Request["ID"]));
    b.Add(Convert.ToInt32(ds.Tables[0].Rows[0][3].ToString()) + 1);
    myTemp.upd(b);
    } dtBind();
    } private void dtBind()
    {
    Db.Temp myTemp = new Db.Temp();
    DataSet ds1 = myTemp.dsSelWhereRegName(Convert.ToString(Session["RegName"]));
    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("ID",typeof(Int32)));
    dt.Columns.Add(new DataColumn("Sort",typeof(string)));
    dt.Columns.Add(new DataColumn("ProductID",typeof(Int32)));
    dt.Columns.Add(new DataColumn("ProductName",typeof(string)));
    dt.Columns.Add(new DataColumn("RtailPrice",typeof(string)));
    dt.Columns.Add(new DataColumn("Price",typeof(Int32)));
    dt.Columns.Add(new DataColumn("ProductNum",typeof(Int32)));
    dt.Columns.Add(new DataColumn("Xiaoji",typeof(Int32)));
    Session["Num"] = "0";
    for(int i=0;i<ds1.Tables[0].Rows.Count;i++)
    {
    DataRow r = dt.NewRow();
    r[0] = Convert.ToInt32(ds1.Tables[0].Rows[i]["ID"]);
    r[1] = ds1.Tables[0].Rows[i]["Sort"].ToString();
    r[2] = Convert.ToInt32(ds1.Tables[0].Rows[i]["ProductID"]);
    Db.Products myProducts = new Db.Products();
    SqlDataReader dr3 = myProducts.drWhereID(Convert.ToInt32(ds1.Tables[0].Rows[i]["ProductID"]));
    if(dr3.Read())
    {
    r[3] = dr3.GetString(1);
    }
    r[4] = Session["RetailPrice"].ToString();
    r[5] = Convert.ToInt32(Session["RetailPrice"].ToString());
    r[6] = Convert.ToInt32(ds1.Tables[0].Rows[i]["ProductNum"]);
    r[7] = Convert.ToInt32(Session["RetailPrice"].ToString())*Convert.ToInt32(ds1.Tables[0].Rows[i]["ProductNum"].ToString());
    dt.Rows.Add(r);
    Session["Num"] = Convert.ToString(Convert.ToInt32(Session["Num"]) + Convert.ToInt32(Session["RetailPrice"].ToString())*Convert.ToInt32(ds1.Tables[0].Rows[i]["ProductNum"].ToString()));
    } lblNum.Text = Session["Num"].ToString(); dgGouwuche.DataSource = dt.DefaultView;
    dgGouwuche.DataBind();
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.dgGouwuche.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgGouwuche_CancelCommand);
    this.dgGouwuche.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgGouwuche_EditCommand);
    this.dgGouwuche.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgGouwuche_UpdateCommand);
    this.dgGouwuche.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgGouwuche_DeleteCommand);
    this.dgGouwuche.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgGouwuche_ItemDataBound);
    this.dgGouwuche.SelectedIndexChanged += new System.EventHandler(this.dgGouwuche_SelectedIndexChanged);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void dgGouwuche_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    dgGouwuche.EditItemIndex = -1;
    dtBind();
    } private void dgGouwuche_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    dgGouwuche.EditItemIndex = e.Item.ItemIndex;
    dtBind();
    } private void dgGouwuche_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    Db.Temp myTemp = new Db.Temp();
    myTemp.updProductNum(Convert.ToInt32(((TextBox)dgGouwuche.Items[e.Item.ItemIndex].Cells[5].Controls[0]).Text),Convert.ToInt32(dgGouwuche.DataKeys[e.Item.ItemIndex]));
    Response.Write("<script>alert('修改成功!')</script>");
    dgGouwuche.EditItemIndex = -1;
    dtBind();
    } private void dgGouwuche_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    Db.Temp myTemp = new Db.Temp();
    DataSet ds1 = myTemp.dsSelWhereRegName(Convert.ToString(Session["RegName"]));
    myTemp.del(Convert.ToInt32(dgGouwuche.DataKeys[e.Item.ItemIndex]));
    Response.Write("<script>alert('删除成功!')</script>");
    dgGouwuche.EditItemIndex = -1;
    dtBind();
    } public static string Encrypt(string password)   //密码加密程序,.text中也提供有的 

    // Force the string to lower case 
    // 
    password = password.ToLower();  Byte[] clearBytes = new UnicodeEncoding().GetBytes(password); 
    Byte[] hashedBytes = ((HashAlgorithm) CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes);  return BitConverter.ToString(hashedBytes); 
    } private void dgGouwuche_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemIndex<0) return;
    e.Item.Attributes.Add("onmouseover","currentcolor=this.style.backgroundColor;this.style.backgroundColor='EFEBEF'"); 
    e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=currentcolor"); for(int i=0;i<this.dgGouwuche.Items.Count;i++)
    {
    this.dgGouwuche.Items[i].Cells[7].Attributes.Add("onclick","return confirm('确定删除该记录?')");
    }
    } private void dgGouwuche_SelectedIndexChanged(object sender, System.EventArgs e)
    {


    }
    }
      

  2.   

    if(ds1.Tables[0].Rows[i]["ID"] != DBNull.Value)
    {r[0] = Convert.ToInt32(ds1.Tables[0].Rows[i]["ID"]);
    ....}