从一个 Access读取的数据怎么上传到Sql中?

茂十茂 2013-06-27 09:45:34


string sqlStr = "select * from XM where ISPOST=0";
OleDbCommand Dbcom = new OleDbCommand(sqlStr, connMdb);
OleDbDataReader dbDR = Dbcom.ExecuteReader();
//怎么样将上面查询到的结果上传到SQL中?
// 下面是SQL的查询.
comStr = "select * from XM1 ";
SqlCommand Dbcom = new SqlCommand(comStr, connSQL);



有没有一个语句可以将access中的查询结果上传到SQL中呢?
最好不要用循环,因为字段太多了,不可能一个个写
谢谢!
...全文
178 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
心悠茶亦香 2013-06-29
  • 打赏
  • 举报
回复
围观各种回答。
独立级IT民工 2013-06-28
  • 打赏
  • 举报
回复
1、直接用SQL导入向导,但字段一定要对应正确 2、查询出Access表中数据,然后循环插入,其实和从EXCEL表中取数据,插入SQL数据库一个道理。
by_封爱 版主 2013-06-28
  • 打赏
  • 举报
回复
还有比较简单的 就是使用SqlBulkCopy这个东西了 也很快
by_封爱 版主 2013-06-28
  • 打赏
  • 举报
回复
一句话就搞定的事情 何必写这么多代码..

insert into xxoo
select * from 
openrowset(
'Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=Yes;IMEX=1;Database=D:\6总装任务.xlsx',
'select * from [0ETC100295$]')
这个是查询xls的 自己百度下 稍微修改下 就直接查询access了
茂十茂 2013-06-28
  • 打赏
  • 举报
回复

    private void upload()
        {
            if (connMdb == null)
            {
                openDBC();
            }
            if (connMdb.State != ConnectionState.Open)
            {
                openDBC();
            }
            //================================
            string sqlStr = "select * from XM where ISPOST=0";
            OleDbCommand Dbcom = new OleDbCommand(sqlStr, connMdb);
            OleDbDataReader dbDR = Dbcom.ExecuteReader();
            if (int.Parse(textBox3.Text) <= 0)
            {
                MessageBox.Show(this, "没有可被上传的数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            int iCount = 0;
            if (is_connection)
            {
                string sqlStr1="select * from "+Program.sqlConn.Table1;
                SqlCommand DbcomSQL = new SqlCommand(sqlStr1, conn);
                while (dbDR.Read())
                {
                    sqlStr1 = "INSERT INTO " + Program.sqlConn.Table1 + "(BarCode,FDate,T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,T11,T12,T13,T14,T15,T16,T17,T18,Status,ISPOST)";
                    sqlStr1 += " VALUES('"+dbDR["BarCode"].ToString()+"','";
                    sqlStr1 += dbDR["postdate"].ToString() + "',";
                    sqlStr1 += dbDR["T01"].ToString() + ",";
                    sqlStr1 += dbDR["T02"].ToString() + ",";
                    sqlStr1 += dbDR["T03"].ToString() + ",";
                    sqlStr1 += dbDR["T04"].ToString() + ",";
                    sqlStr1 += dbDR["T05"].ToString() + ",";
                    sqlStr1 += dbDR["T06"].ToString() + ",";
                    sqlStr1 += dbDR["T07"].ToString() + ",";
                    sqlStr1 += dbDR["T08"].ToString() + ",";
                    sqlStr1 += dbDR["T09"].ToString() + ",";
                    sqlStr1 += dbDR["T10"].ToString() + ",";
                    sqlStr1 += dbDR["T11"].ToString() + ",";
                    sqlStr1 += dbDR["T12"].ToString() + ",";
                    sqlStr1 += dbDR["T13"].ToString() + ",";
                    sqlStr1 += dbDR["T14"].ToString() + ",";
                    sqlStr1 += dbDR["T15"].ToString() + ",";
                    sqlStr1 += dbDR["T16"].ToString() + ",";
                    sqlStr1 += dbDR["T17"].ToString() + ",";
                    sqlStr1 += dbDR["T18"].ToString() + ",";
                    sqlStr1 += dbDR["Status"].ToString() + ",";
                    sqlStr1 += "1)";
                    DbcomSQL.CommandText = sqlStr1 ;
                    DbcomSQL.ExecuteNonQuery();
                   iCount++;
                }
                dbDR.Close();
                sqlStr = "UPDATE XM SET ISPOST=1 where ISPOST=0";
                Dbcom.CommandText = sqlStr;
                int iRet = Dbcom.ExecuteNonQuery();

                sqlStr = "SELECT * FROM XM where ISPOST=0";
                Dbcom.CommandText = sqlStr;
                textBox3.Text = Dbcom.ExecuteNonQuery().ToString();
                if (int.Parse(textBox3.Text) > 0)
                {
                    btnUpload.Enabled = true;
                }
                else
                {
                    btnUpload.Enabled = false;
                }
                MessageBox.Show(this, "数据上传完成!共:" + iCount.ToString() + "条记录被上传!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                textBox1.Text = "0";
                btnUpload.Enabled = false;
            }
            else
            {
                MessageBox.Show(this, "远程数据库连接失败,不能将本地数据上传到服务器!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

        }
这是我的代码,要用每一句循环来插入这样效率可能会低很多,有没有一次性将OleDbDataReader dbDR的结果传到SQL中呢?
feixuyue 2013-06-28
  • 打赏
  • 举报
回复
sqlbulkcopy
茂十茂 2013-06-28
  • 打赏
  • 举报
回复
引用 6 楼 diaodiaop 的回复:
一句话就搞定的事情 何必写这么多代码..

insert into xxoo
select * from 
openrowset(
'Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=Yes;IMEX=1;Database=D:\6总装任务.xlsx',
'select * from [0ETC100295$]')
不行的,试了用Openrowset,说是SQL2005安全保护之类,不支持这类驱动。而且一般要服务器端也要支持这个功能才行. 这个是查询xls的 自己百度下 稍微修改下 就直接查询access了
本拉灯 2013-06-27
  • 打赏
  • 举报
回复
引用 楼主 comszmz 的回复:


            string sqlStr = "select * from XM where ISPOST=0";
            OleDbCommand Dbcom = new OleDbCommand(sqlStr, connMdb);
            OleDbDataReader dbDR = Dbcom.ExecuteReader();
            //怎么样将上面查询到的结果上传到SQL中?
            // 下面是SQL的查询.
            comStr = "select  * from XM1 ";
            SqlCommand Dbcom = new SqlCommand(comStr, connSQL);
            
有没有一个语句可以将access中的查询结果上传到SQL中呢? 最好不要用循环,因为字段太多了,不可能一个个写 谢谢!
用SQL导入功能,选数据源为Access 找到你的Access文件夹,勾选要导的表。。即可
threenewbee 2013-06-27
  • 打赏
  • 举报
回复
你可以编程获得一个Access数据库的表结构和字段列表,然后编写成一个通用的导入程序。
Regan-lin 2013-06-27
  • 打赏
  • 举报
回复
用update不可以解决你的要求?

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧