当前位置:编程学习 > C#/ASP.NET >>

用C#怎样做一个批量新增的功能呢?


用C#怎样做一个批量新增的功能呢?图片红色的字是字段名。就是可以填写多个数据新增。麻烦写个例子,谢谢了 --------------------编程问答-------------------- 表是这个,还有字段名
USE [CS]
GO

CREATE TABLE [dbo].[TbShInDetail](
[InDetailID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[InID] [numeric](18, 0) NOT NULL,
[UnitPrice] [money] NULL,
[Amount] [money] NULL,
[SumPrice] [money] NULL,
[Note] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[HandlePeople] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[GoodsName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
inid as 采购单号,HandlePeople as  采购人,GoodsName as 物品名称 ,Amount as 数量,UnitPrice as 单价,SumPrice as 金额,Note as 备注 --------------------编程问答-------------------- 没有会了吗? --------------------编程问答-------------------- 给你一个提示,用dataset的datatable绑定窗体显示的数据,当你对相关数据更改以后,提交datatable的更新就可以了,大概形式如下所示:
DataSet dataset = "select * from dual"  // 取得数据
DataTable tb  = dataset.table[0];
this.frmData.DataSource = dataset.table[0];

下面对tb中的数据更新
tb.rows[0][0] = "1111";

提交更新就可以了。
--------------------编程问答-------------------- 麻烦写出完整的代码呢?谢谢 --------------------编程问答-------------------- 你把你的源码发给我看看,看看你是如何填充数据的,这样才好帮你啊。 --------------------编程问答-------------------- 呵呵,我还没写代码,不知道怎下手,上面的效果图是我画出来的,我想实现这样的效果,才麻烦你们写个例子 --------------------编程问答-------------------- 可以这样写物品,单价,数量,金额备注就放在dataGridView1,其他的字段就可以放在textbox里。 --------------------编程问答-------------------- SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=StunetSystem;Integrated Security=True");
  conn.Open();
  string sql ="select * from TbShInDetail ";
SqlDataAdapter ad=new SqlDataAdapter(sql,conn);
SqlCommBuilder builder =new SqlCommBuilder(ad);
DataTable dt=new DataTable();
ad.Fill(dt);
dataGridView1.DataSource=dt;


然后你批量录入完成后,
ad.Update(dt);即可

--------------------编程问答-------------------- 呵呵,就是批量录不知道怎写 --------------------编程问答--------------------
我改成这个了,不过只能新增一条,批量的for循环不知道怎写了,麻烦大家了
public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();

        }
        SqlConnection conn;
        SqlDataAdapter adapter;
        private DataTable dbconn(string strSql)
        {
            conn.Open();
            this.adapter = new SqlDataAdapter(strSql, conn);
            DataTable dtSelect = new DataTable();
            int rnt = this.adapter.Fill(dtSelect);
            conn.Close();
            return dtSelect;
        }
        private void button2_Click(object sender, EventArgs e)
        {
            conn = new SqlConnection("server=.;database=db_16;uid=sa;pwd=rt");
            // SqlConnection sqlconnection = new SqlConnection(conn);
            SqlDataAdapter sqldataadapter = new SqlDataAdapter("select * from tb_emp1 where 1=2", conn);
            DataSet dataset = new DataSet();
            sqldataadapter.Fill(dataset, "tb_emp1");
            DataTable datatable = dataset.Tables[0];

            DataRow datarow = datatable.NewRow();

            datarow["name"] = this.dataGridView1.Rows[0].Cells[2].Value.ToString();
            datarow["zcheng"] = this.dataGridView1.Rows[0].Cells[2].Value.ToString();
            datarow["cort"] = this.dataGridView1.Rows[0].Cells[3].Value.ToString(); ;
            datarow["sex"] = this.dataGridView1.Rows[0].Cells[4].Value.ToString();
            datatable.Rows.Add(datarow);

            SqlCommand insertcommand = new SqlCommand("INSERT INTO [tb_emp1]([name],[zcheng],[cort],[sex])" +
            "VALUES(@name, @zcheng,@cort,@sex)", new SqlConnection("server=.;database=db_16;uid=sa;pwd=rt"));
            insertcommand.Parameters.Add("@name", SqlDbType.NChar, 50, "name");
            insertcommand.Parameters.Add("@zcheng", SqlDbType.NChar, 25, "zcheng");
            insertcommand.Parameters.Add("@cort", SqlDbType.NChar, 255, "cort");
            insertcommand.Parameters.Add("@sex", SqlDbType.NChar, 25, "sex");
            sqldataadapter.InsertCommand = insertcommand;

            sqldataadapter.Update(dataset, "tb_emp1");

        } --------------------编程问答-------------------- 你有试我的方法先,
ad.Update(dt)
这就是实现批量录入功能的了!
哥 --------------------编程问答-------------------- 不需要这样的,你就把查询出的数据绑定至dataGridView1中,
SqlCommBuilder builder;
SqlDataAdapter ad;
DataTable dt;
把数据查询至dataGridView1
SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=StunetSystem;Integrated Security=True");
  conn.Open();
  string sql ="select * from TbShInDetail ";
 ad=new SqlDataAdapter(sql,conn);
 builder =new SqlCommBuilder(ad);
 dt=new DataTable();
ad.Fill(dt);
dataGridView1.DataSource=dt;

然后你就在dataGridView1中录入N行都可以,在加一保存按钮(事件中)
加入代码
ad.Update(dt);
就可以了 --------------------编程问答-------------------- 采购单号和采购人不是在dataGridView1里的,怎处理呢? --------------------编程问答-------------------- 我想把采购单号和采购人放在textBox1里和物品,单价,数量,金额备注就放在dataGridView1,这个怎组合新增呢? --------------------编程问答-------------------- 那就FOR循环呗
可用这方式
private void button2_Click(object sender, EventArgs e)
  {
  conn = new SqlConnection("server=.;database=db_16;uid=sa;pwd=rt");
  // SqlConnection sqlconnection = new SqlConnection(conn);
  SqlDataAdapter sqldataadapter = new SqlDataAdapter("select * from tb_emp1 where 1=2", conn);

  SqlCommBuilder builder =new SqlCommBuilder(sqldataadapter);
  DataSet dataset = new DataSet();
  sqldataadapter.Fill(dataset, "tb_emp1");
  DataTable datatable = dataset.Tables[0];
  for (int i=0;i<dataGridView1.Rows.Count;i++)
{
  DataRow datarow = datatable.NewRow();

  datarow["name"] = this.dataGridView1.Rows[i].Cells[0].Value.ToString();
  datarow["zcheng"] = this.dataGridView1.Rows[i].Cells[1].Value.ToString();
  datarow["cort"] = this.dataGridView1.Rows[i].Cells[2].Value.ToString(); ;
  datarow["sex"] = this.dataGridView1.Rows[i].Cells[3].Value.ToString();
  datarow["采购单号"]=TextBox1.Text;
  datarow["采购人"]=TextBox2.Text;
  datatable.Rows.Add(datarow);
}

  sqldataadapter.Update(dataset, "tb_emp1"); --------------------编程问答-------------------- 应该这样,你代码可能有问题
那就FOR循环呗
可用这方式
private void button2_Click(object sender, EventArgs e)
  {
  conn = new SqlConnection("server=.;database=db_16;uid=sa;pwd=rt");
  // SqlConnection sqlconnection = new SqlConnection(conn);
  SqlDataAdapter sqldataadapter = new SqlDataAdapter("select * from tb_emp1 where 1=2", conn);

  SqlCommBuilder builder =new SqlCommBuilder(sqldataadapter);
  DataTable dt=new DataTable();
  sqldataadapter.Fill(dt);
  for (int i=0;i<dataGridView1.Rows.Count;i++)
{
  DataRow datarow = dt.NewRow();

  datarow["name"] = this.dataGridView1.Rows[i].Cells[0].Value.ToString();
  datarow["zcheng"] = this.dataGridView1.Rows[i].Cells[1].Value.ToString();
  datarow["cort"] = this.dataGridView1.Rows[i].Cells[2].Value.ToString(); ;
  datarow["sex"] = this.dataGridView1.Rows[i].Cells[3].Value.ToString();
  datarow["采购单号"]=TextBox1.Text;
  datarow["采购人"]=TextBox2.Text;
  dt.Rows.Add(datarow);
}

  sqldataadapter.Update(dt); --------------------编程问答-------------------- 这种方法也不太行哦,出错 了,能不能加一下我QQ呢?83667664谢谢 --------------------编程问答-------------------- 批量循环插入就是了,想在画面插数据还是数据库? --------------------编程问答-------------------- 插到数据库里 --------------------编程问答--------------------  SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(cn);
        sqlBulkCopy.DestinationTableName = "BOC_DATA";
        sqlBulkCopy.BatchSize = table.Rows.Count;
        if (table != null && table.Rows.Count != 0)
        {
            sqlBulkCopy.WriteToServer(table);
        }
        sqlBulkCopy.Close();
        cn.Close(); --------------------编程问答--------------------
引用 19 楼  的回复:
插到数据库里

正在使用 --------------------编程问答--------------------
引用 20 楼  的回复:
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(cn);
  sqlBulkCopy.DestinationTableName = "BOC_DATA";
  sqlBulkCopy.BatchSize = table.Rows.Count;
  if (table != null && table.Rows.Count != 0)
  ……
这个才对,点错楼 --------------------编程问答-------------------- 批量操作也就是多条SQL语句在一起执行,也就是动态的组织SQL语句然后对sql进行操作,只要搞清楚这个了之后剩下的就是写循环拼接SQL了,希望对lz有所帮助。
补充:.NET技术 ,  其他语言
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,