在winform中有一个DataGridview,数据源是在代码中自定义的datatable,这个DataTable(符合目标数据库的结构),在datagridview中填充了数据后,有没有高效的方法写入sqlserver数据库,现在已有的办法是把DataTable当成多维数组,循环遍历使用Insert语句插入,但这样DataTable没有发挥自身的特点。另一种方法是使用SqlBulkCopy()类,将DataTable做为源,但如果数据量不大,似乎这种方法效率不高,请问还有其他什么方法???

解决方案 »

  1.   

    很。很简单,请百度一下:dataset 到数据的更新
      

  2.   

    不知楼主要处理的数量有多大,在我看来sqlbulkcopy已经是很不错的了 
      

  3.   

    我的代码是下面这样的写的,现在不知道如何用更好的办法把DataGridView1中所输入的每行数据给保存到sqlserver数据库中,(我用的是简单三层架构框架)
                Static  DataSet dsDetail = new DataSet();
                DataTable dt = dsDetail.Tables.Add("newTables");
            private void w_store_in_Load(object sender, EventArgs e)
            {
                DataColumn CurrentState = dt.Columns.Add("CurrentState", typeof(string));
                DataColumn NewState = dt.Columns.Add("NewState", typeof(string));
                DataColumn GoodsNo = dt.Columns.Add("GoodsNo", typeof(string));
                DataColumn KindNo = dt.Columns.Add("KindNo", typeof(string));
                DataColumn ShopsignNo = dt.Columns.Add("ShopsignNo", typeof(string));
                DataColumn PackNum = dt.Columns.Add("PackNum", typeof(string));
                DataColumn ProareaNo = dt.Columns.Add("ProareaNo", typeof(string));
                DataColumn GoodsOwnerPackNum = dt.Columns.Add("GoodsOwnerPackNum", typeof(string));
                DataColumn GradeNum = dt.Columns.Add("GradeNum", typeof(string));
                DataColumn InNetweight = dt.Columns.Add("InNetweight", typeof(decimal));
                DataColumn InGrossWeight = dt.Columns.Add("InGrossWeight", typeof(decimal));
                DataColumn SheetNum = dt.Columns.Add("SheetNum", typeof(decimal));
                DataColumn OwnerNo = dt.Columns.Add("OwnerNo", typeof(string));
                DataColumn GoodsLoc = dt.Columns.Add("GoodsLoc", typeof(string));
                CurrentState.MaxLength = 2;
                //设置表主键
                  GoodsNo.Unique = true;
                GoodsNo.AllowDBNull = false;            dt.NewRow();
                dsDetail.Tables[0].Rows.Add(dsDetail.Tables[0].NewRow());
              
                dataGridView1.DataSource = dsDetail.Tables["newTables"];
                dataGridView1.Columns["GoodsNo"].Visible = false;
                dataGridView1.Columns["CurrentState"].HeaderText = "当前状态";
                dataGridView1.Columns["NewState"].HeaderText = "新状态";
                dataGridView1.Columns["GoodsNo"].HeaderText = "系统编号";
                dataGridView1.Columns["KindNo"].HeaderText = "品种";
                dataGridView1.Columns["ShopsignNo"].HeaderText = "钢种";
                dataGridView1.Columns["PackNum"].HeaderText = "捆包";
                dataGridView1.Columns["ProareaNo"].HeaderText = "产地";
                dataGridView1.Columns["GoodsOwnerPackNum"].HeaderText = "货主捆包号";
                dataGridView1.Columns["GradeNum"].HeaderText = "规格";
                dataGridView1.Columns["InNetWeight"].HeaderText = "净重";
                dataGridView1.Columns["InGrossWeight"].HeaderText = "毛重";
                dataGridView1.Columns["OwnerNo"].HeaderText = "货主";
                dataGridView1.Columns["GoodsLoc"].HeaderText = "库位";
                dataGridView1.Columns["SheetNum"].HeaderText = "张数";
                //字段格式化
                  dataGridView1.Columns["InNetWeight"].DefaultCellStyle.Format = "N3";
                dataGridView1.Columns["InNetWeight"].DefaultCellStyle.Format = "N3";
    }
    望高手帮忙!