首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

C#发何批量插入数据到数据表的有关问题

2013-03-17 
C#发何批量插入数据到数据表的问题?1.我有2张SQL数据表:库存表 入库表 列名为 名称数量 单位2.现有一张有5

C#发何批量插入数据到数据表的问题?
1.我有2张SQL数据表:库存表 入库表 
列名为 名称  数量 单位

2.现有一张有5条数据的单据需要入库如:
 名称  数量 单位
《易经》 2   本
《书经》 3   本
《诗经》 5   本
《周礼》 6   本

3.我一条一条的把数据录入到SQL入库表,然后根据相同单号查询并返回到页面用GRIDVIEW再显示便于删改.

2.现在GRIDVIEW中的数据确定后,需要把GRIDVIEW中的5条数据一起插入到库存表中,条件是:如果库存表中有相同名称的,就直接更新数量;如果库存表中没有相同名称的,就直接插入新记录.这样的效果应该怎么去实现,是用Foreach语句去循环GRIVIEW来达到我要的效果吗?如果用Foreach语句,我应该怎么去写这段代码? 
[解决办法]
如果库存表中有相同名称的,就直接更新数量;如果库存表中没有相同名称的,就直接插入新记录
==>
这个直接用sql语句来判断
if exists (select count(名称) from 表名 where 名称='易经') update 表名 set 数量=你的数量 where 名称='易经' else insert into 表名() values()
这样行了,

[解决办法]
将插入的数据和数据库中已经存在的数据进行比对,如果存在,那直接跳过,如果不存在,那进行插入操作。

[解决办法]
要写两条SQL
//先删除tb1内与tb2相同编号的数据
DElete From tb1 Where f1 in(Select f1 From f2)
//批量导入
insert into tb1(f1,f2...) Select f1,f2... From tb2
[解决办法]

引用:
如果库存表中有相同名称的,就直接更新数量;如果库存表中没有相同名称的,就直接插入新记录
==>
这个直接用sql语句来判断
if exists (select count(名称) from 表名 where 名称='易经') update 表名 set 数量=你的数量 where 名称='易经' else insert into 表名() values()
这样行……

+1

我记得帮同学写过这个代码,他也是通过数据实现的,记得当时写的是一个触发器。
[解决办法]
利用Excel表导入功能吧,下面是一小段代码,把那些语句改一下,判断有重复的就执行更新数量的语句,没有就执行插入的语句。
 for (int i = 0; i < rows; i++)
                    {
                        string sql_getpk = "select * from oavehicle where ascode ='" + myds.Tables["oaasset"].Rows[i][0] + "'";
                        SqlDataAdapter myAdapter = new SqlDataAdapter(sql_getpk, myConn);
                        if (myAdapter.Fill(myds, "temp") != 0)
                        {
                            n++;
                            repeat += myds.Tables["oaasset"].Rows[i][0] + " " + myds.Tables["oaasset"].Rows[i][1] + " " + myds.Tables["oaasset"].Rows[i][8] + ", ";


                        }
                        myConn.Close();
                    }

                    if (n > 0)
                    {
                        Label1.Text = "导入失败:当前Excel表中共有" + n + "条记录与数据库中记录重复。<br />重复的主键为:" + repeat;
                    }
                    else
                    {
                        DatabaseControl dc = new DatabaseControl();
                        dc.Connect(connStr);
                        dc.BeginTransaction();

                        try
                        {
                            for (int i = 0; i < rows; i++)
                            {
                                insertSql = "insert into oavehicle values('";
                                bool canInsert = true;
                                for (int j = 0; j < cols; j++)
                                {
                                    if (j == 0)
                                    {


                                        insertSql = insertSql + myds.Tables["oaasset"].Rows[i][j].ToString();
                                        if (myds.Tables["oaasset"].Rows[i][j].ToString() == "")
                                        {
                                            canInsert = false;
                                        }
                                    }
                                    else
                                    {
                                        insertSql += "','" + myds.Tables["oaasset"].Rows[i][j].ToString().Replace(" 0:00:00", "");
                                    }
                                }
                                insertSql += "')";
                                if (canInsert)
                                {
                                    dc.ExecSQL(insertSql);
                                }
                            }


                            dc.Commit();
                            Label1.Text = "数据已成功导入!";
                            BindGridView1();
                        }

热点排行