如下是我写的最简洁的保存代码了,感觉还是太长了,还可以再优化一点吧,感觉以前用ADO的话,代码要少得多.
            //保存主表
            SqlParameter[] parameter = {new SqlParameter("@客户名称",SqlDbType.VarChar,20),
                                           new SqlParameter("@版次",SqlDbType.VarChar,20),
                                           new SqlParameter("@日期",SqlDbType.DateTime,20),
                                           new SqlParameter("@变更编号",SqlDbType.VarChar,20),
                                           new SqlParameter("@核准",SqlDbType.VarChar,10),
                                           new SqlParameter("@审核",SqlDbType.VarChar,10),
                                           new SqlParameter("@制表",SqlDbType.VarChar,10),
                                           new SqlParameter("@客户型号",SqlDbType.VarChar,20),
                                           new SqlParameter("@图号",SqlDbType.VarChar,20),
                                           new SqlParameter("@品名",SqlDbType.VarChar,20),
                                           new SqlParameter("@成品料号",SqlDbType.VarChar,20),
                                           new SqlParameter("@re",SqlDbType.VarChar,200),
                                           new SqlParameter("@成品描述",SqlDbType.VarChar,250),
                                           new SqlParameter("@autoid",SqlDbType.Int)
                                       };
            //给各参数赋值
            parameter[0].Value = 客户名称.Text;
            parameter[1].Value = cs1;
            parameter[2].Value = DateTime.Today;
            parameter[3].Value = 变更编号.Text;
            parameter[4].Value = 核准.Text;
            parameter[5].Value = 审核.Text;
            parameter[6].Value = 制表.Text;
            parameter[7].Value = 客户型号.Text;
            parameter[8].Value = 图号.Text;
            parameter[9].Value = 品名.Text;
            parameter[10].Value = 成品料号.Text;
            parameter[11].Value = re.Text;
            parameter[12].Value = 成品描述.Text;
            parameter[13].Value = autoid;
            //添加SQL语句
            string strsql = "insert into BOM主表(客户名称,版次,日期,变更编号,核准,审核,制表,客户型号,图号,品名,成品料号,备注,成品描述,autoid) " +
                            "values(@客户名称,@版次,@日期,@变更编号,@核准,@审核,@制表,@客户型号,@图号,@品名,@成品料号,@re,@成品描述,@autoid)";
            SqlCommand cmd = new SqlCommand(strsql, cna);
            //赋给SQL语句各参数值
            foreach (var item in parameter)
            {
                cmd.Parameters.Add(item);
            }
            cna.Open();
            //执行查询
            cmd.ExecuteNonQuery();
            cna.Close();
            MessageBox.Show("保存成功");

解决方案 »

  1.   

    SQL语句可以换成执行存储过程,
    string strsql = "insert into BOM主表(客户名称,版次,日期,变更编号,核准,审核,制表,客户型号,图号,品名,成品料号,备注,成品描述,autoid) " + 
                                "values(@客户名称,@版次,@日期,@变更编号,@核准,@审核,@制表,@客户型号,@图号,@品名,@成品料号,@re,@成品描述,@autoid)"; 
    都可以省略了,直接写个存储过程名称,设置下COMMAND的执行存储过程即可
      

  2.   

            public static int ExecuteNonQuery(string sql, ArrayList arr)
            {
                OleDbConnection conn = getConn();
                conn.Open();
                OleDbCommand comm = new OleDbCommand(sql, conn);
                if (arr != null)
                {
                    for (int i = 0; i < arr.Count; i++)
                    {
                        object[] obj = (object[])arr[i];
                        OleDbParameter odp = new OleDbParameter(obj[0].ToString(), obj[1]);
                        comm.Parameters.Add(odp);
                    }
                }
                int n = 0;
                try
                {
                    n = comm.ExecuteNonQuery();
                }
                catch (Exception e) { MessageBox.Show(e.Message); }
                conn.Close();
                return n;
            }看看这个,string sql="insert into (id)values(@id)"; ArrayList arr=new  ArrayList();
    arr.Add(New Object[]{"id",5});
    ExecuteNonQuery(sql,arr);
      

  3.   

    SqlCommand cmd = new SqlCommand(strsql, cna); 
                //赋给SQL语句各参数值 
                foreach (var item in parameter) 
                { 
                    cmd.Parameters.Add(item); 
                }  /////cmd.Parameters.AddRange(new SqlParameter[]{
    ???,
    ???,
    });cmd.Parameters[0].Value ="123";
    cmd.Parameters.
      

  4.   

    如果想省的话就这样
    string strsql = "insert into BOM主表(客户名称,版次,日期,变更编号,核准,审核,制表,客户型号,图号,品名,成品料号,备注,成品描述,autoid) " + 
                                "values('"+客户名称.Text+"'......)";
     
    //后面以此类推这样加就可以了,不用加那个SqlParameter            SqlCommand cmd = new SqlCommand(strsql, cna); 
                //赋给SQL语句各参数值 
                foreach (var item in parameter) 
                { 
                    cmd.Parameters.Add(item); 
                } 
                cna.Open(); 
                //执行查询 
                cmd.ExecuteNonQuery(); 
                cna.Close(); 
                MessageBox.Show("保存成功");
      

  5.   

    我也想省,就怕 客户名称.Text 有的时候为空,