公布部分C#编写库存管理软件代码供所有.Net开发爱好者共同学习。
代码网友可直接引用,如转载请注明出处。
http://spaces.msn.com/zhihongf/
第三部分提交入库单,写入入库数据。
代码编写:方志洪
E-mail:zhihongf@Gmail.com
2006年2月6日。
 
 
  #region 提交入库单,写入数据库。
  /// <summary>
  /// 提交入库单,写入数据库
  /// </summary>
  /// <returns>返回是否完成数据库写入操作</returns>
  private bool PutInMainWriteData()
  {
   if(this.texSupplier.Text.Length > 0)
   {
    //判断ListView控件是否有数据
    if(this.livPutInMessage.Items.Count > 0)
    {
     System.Windows.Forms.DialogResult dialog;
     dialog=MessageBox.Show(this,"您是否确认提交编号:"+this.txtPutInID.Text+" 入库单    \n\n入库记录:"+this.livPutInMessage.Items.Count.ToString()+"条","入库确认",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button2);
     if(dialog==System.Windows.Forms.DialogResult.Yes)
     {
      #region 入库数据库操作
      //判断当前入库单号是否有效。
      if(this.txtPutInID.Text != this.GetPutInID(this.dtpPutInDate.Value))
      {
       //已有其他人提交入库单,占用但前入库单号。获取新入库单号。
       this.txtPutInID.Text = this.GetPutInID(this.dtpPutInDate.Value);
       MessageBox.Show("您当前提交的入库单号已被使用,新入库单号为:"+this.txtPutInID.Text);
      }
      //=============================================================================================================
      //使用数据库事务将数据写入 【入库明细】,【入库记录】表,并修改【产品清单】表中的【上次进价】,【目前库存量】。
      //=============================================================================================================
      //数据库链接定义
      System.Data.SqlClient.SqlConnection sqlconnection=new System.Data.SqlClient.SqlConnection();
      System.Data.SqlClient.SqlCommand sqlcommandPutIn=new System.Data.SqlClient.SqlCommand();//入库记录
      System.Data.SqlClient.SqlCommand sqlcommandList=new System.Data.SqlClient.SqlCommand();//入库明细
      System.Data.SqlClient.SqlCommand sqlcommandProduct=new System.Data.SqlClient.SqlCommand();//产品清单
      sqlconnection.ConnectionString=AppConfig.ClassDataLinkString.DataConnection;
      sqlcommandPutIn.Connection=sqlconnection;
      sqlcommandPutIn.CommandType=System.Data.CommandType.Text;
      sqlcommandList.Connection=sqlconnection;
      sqlcommandList.CommandType=System.Data.CommandType.Text;
      sqlcommandProduct.Connection=sqlconnection;
      sqlcommandProduct.CommandType=System.Data.CommandType.Text;
      //获取产品名称的拼音简码。
      ZhihongFang.ChineseSpell chineseSpell=new ChineseSpell();
      try
      {
       sqlconnection.Open();
       //数据库SQL命令
       //入库明细
       string SQLPutIn="INSERT INTO [入库明细]([入库单号],[产品编号],[本次进价],[进货数量],[产品名称],[规格],[包装单位],[上次进价],[进价参考],[名称编码]) ";
       SQLPutIn += "VALUES(@PutInID,@ProductID,@NowPrice,@Quantity,@ProductName,@ProductSpecs,@Nuti,@LastTimePrice,@PutInPrice,@NameCode)";
       sqlcommandPutIn.CommandText=SQLPutIn;
       sqlcommandPutIn.Parameters.Add("@PutInID",System.Data.SqlDbType.Char,14,"入库单号");
       sqlcommandPutIn.Parameters.Add("@ProductID",System.Data.SqlDbType.Char,15,"产品编号");
       System.Data.SqlClient.SqlParameter parameterNowPrice=new System.Data.SqlClient.SqlParameter("@NowPrice",System.Data.SqlDbType.Decimal);
       parameterNowPrice.Precision=9;
       parameterNowPrice.Scale=2;
       sqlcommandPutIn.Parameters.Add(parameterNowPrice);
       sqlcommandPutIn.Parameters.Add("@Quantity",System.Data.SqlDbType.Float);
       sqlcommandPutIn.Parameters.Add("@ProductName",System.Data.SqlDbType.NVarChar,50,"产品名称");
       sqlcommandPutIn.Parameters.Add("@ProductSpecs",System.Data.SqlDbType.NVarChar,50,"规格");
       sqlcommandPutIn.Parameters.Add("@Nuti",System.Data.SqlDbType.NVarChar,20,"包装单位");
       System.Data.SqlClient.SqlParameter parameterLastTimePrice=new System.Data.SqlClient.SqlParameter("@LastTimePrice",System.Data.SqlDbType.Decimal);
       parameterLastTimePrice.Precision=9;
       parameterLastTimePrice.Scale=2;
       sqlcommandPutIn.Parameters.Add(parameterLastTimePrice);
       System.Data.SqlClient.SqlParameter parameterPutInPrice=new System.Data.SqlClient.SqlParameter("@PutInPrice",System.Data.SqlDbType.Decimal);
       parameterPutInPrice.Precision=9;
       parameterPutInPrice.Scale=2;
       sqlcommandPutIn.Parameters.Add(parameterPutInPrice);
       sqlcommandPutIn.Parameters.Add("@NameCode",System.Data.SqlDbType.NVarChar,50,"名称编码");
       sqlcommandPutIn.Prepare();
       //入库记录
       string SQLList="INSERT INTO [入库记录]([入库单号],[入库时间],[经办人],[供货商编号],[入库备注]) ";
       SQLList +="VALUES(@PutInID,@PutInDate,@Manager,@SupplierID,@PutInNode)";
       sqlcommandList.CommandText=SQLList;
       sqlcommandList.Parameters.Add("@PutInID",System.Data.SqlDbType.Char,14,"入库单号");
       sqlcommandList.Parameters.Add("@PutInDate",System.Data.SqlDbType.DateTime);
       sqlcommandList.Parameters.Add("@Manager",System.Data.SqlDbType.NVarChar,4,"经办人");
       sqlcommandList.Parameters.Add("@SupplierID",System.Data.SqlDbType.Char,15,"供货商编号");
       sqlcommandList.Parameters.Add("@PutInNode",System.Data.SqlDbType.Text,500,"入库备注");
    
       sqlcommandList.Prepare();
       //事务开始.;
       System.Data.SqlClient.SqlTransaction sqltransaction=sqlconnection.BeginTransaction();
       try
       {
        sqlcommandPutIn.Transaction=sqltransaction;//事务
        sqlcommandList.Transaction=sqltransaction;
        sqlcommandProduct.Transaction=sqltransaction;
        //执行添加入库记录
        sqlcommandList.Parameters["@PutInID"].Value=this.txtPutInID.Text.Trim();
        sqlcommandList.Parameters["@PutInDate"].Value=this.dtpPutInDate.Value.ToString("yyyy-MM-dd");
        sqlcommandList.Parameters["@Manager"].Value=this.txtManager.Text.Trim();
        sqlcommandList.Parameters["@SupplierID"].Value=this.texSupplier.Text.Substring(0,15);
        sqlcommandList.Parameters["@PutInNode"].Value=this.txtNode.Text;
        sqlcommandList.ExecuteNonQuery();
        //执行添加入库明细
        //循环读取ListView控件;
        foreach(System.Windows.Forms.ListViewItem lvi in this.livPutInMessage.Items)
        {
         sqlcommandPutIn.Parameters["@PutInID"].Value=this.txtPutInID.Text.Trim();
         sqlcommandPutIn.Parameters["@ProductID"].Value=lvi.Text.Trim();
         sqlcommandPutIn.Parameters["@NowPrice"].Value=lvi.SubItems[7].Text.Trim();
         sqlcommandPutIn.Parameters["@Quantity"].Value=lvi.SubItems[3].Text.Trim();
         sqlcommandPutIn.Parameters["@ProductName"].Value=lvi.SubItems[1].Text.Trim();
         sqlcommandPutIn.Parameters["@ProductSpecs"].Value=@lvi.SubItems[2].Text.Trim();
         sqlcommandPutIn.Parameters["@Nuti"].Value=lvi.SubItems[4].Text.Trim();
         sqlcommandPutIn.Parameters["@LastTimePrice"].Value=lvi.SubItems[6].Text.Trim();
         sqlcommandPutIn.Parameters["@PutInPrice"].Value=lvi.SubItems[5].Text.Trim();
         sqlcommandPutIn.Parameters["@NameCode"].Value=chineseSpell.GetChineseSpell(lvi.SubItems[1].Text.Trim());
         sqlcommandPutIn.ExecuteNonQuery();
         //==================================================
         //修改【产品清单】表中的【目前库存量】,【上次进价】
         //==================================================
         sqlcommandProduct.CommandText="UPDATE [产品清单] SET [上次进价]="+lvi.SubItems[7].Text.Trim()+",[目前库存量]=[目前库存量]+"+lvi.SubItems[3].Text.Trim()+" WHERE [产品编号] LIKE '"+lvi.Text.Trim()+"'";
         sqlcommandProduct.ExecuteNonQuery();
        }
        sqltransaction.Commit();//提交事务
        //=============================================================================
        //       查看记录单
        //=============================================================================
        //打开记录单显示窗体
        ReportWindows.frmPutInSingleReport frm=new ZhihongFang.ReportWindows.frmPutInSingleReport(this.txtPutInID.Text.Trim());
        frm.ShowDialog(this);
       
        //初始化入库单
        this.InitializePutIn();
        return true;
       }
       catch(System.Exception ex)
       {
        MessageBox.Show(ex.ToString());
        sqltransaction.Rollback();//回滚事务
        return false;
       }
       finally
       {
       }
      }
      catch(System.Exception ex)
      {
       MessageBox.Show(ex.ToString());
       return false;
      }
      finally
      {
       sqlconnection.Close();
      }
      #endregion
     }
     else
     {
      return false;
     }
    }
    else
    {
     //入库单ListView控件没有数据,无须提交入库记录
     MessageBox.Show(this,"未添加入库信息,请先点击【添加入库产品信息】填写入库单","未添加入库信息",MessageBoxButtons.OK,MessageBoxIcon.Exclamation );
     return false;
    }
   }
   else
   {
    //未选择供货商
    MessageBox.Show(this,"您未选择入库产品供货商,请点击【供货商信息】选择。","未选择供货商",MessageBoxButtons.OK,MessageBoxIcon.Exclamation );
    return false;
   }
  }
  #endregion
 
 
=======================================================
对以上代码网友如有建议或更好的实现方法可与我联系。
方志洪
E-mail:zhihongf@gmail.com
2006年2月6日。