从一个 Access读取的数据怎么上传到Sql中? 本帖最后由 comszmz 于 2013-06-27 21:54:21 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以编程获得一个Access数据库的表结构和字段列表,然后编写成一个通用的导入程序。 用SQL导入功能,选数据源为Access 找到你的Access文件夹,勾选要导的表。。即可 1、直接用SQL导入向导,但字段一定要对应正确2、查询出Access表中数据,然后循环插入,其实和从EXCEL表中取数据,插入SQL数据库一个道理。 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中呢? 一句话就搞定的事情 何必写这么多代码..insert into xxooselect * from openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=Yes;IMEX=1;Database=D:\6总装任务.xlsx','select * from [0ETC100295$]')这个是查询xls的 自己百度下 稍微修改下 就直接查询access了 还有比较简单的 就是使用SqlBulkCopy这个东西了 也很快 不行的,试了用Openrowset,说是SQL2005安全保护之类,不支持这类驱动。而且一般要服务器端也要支持这个功能才行.这个是查询xls的 自己百度下 稍微修改下 就直接查询access了 求助,关于语音应用程序 winForm主菜单和快捷菜单一模一样需要建两个菜单吗? 对网络比较了解的进来讨论一下。 急!急! 各位大虾帮个忙。 如何使combobox不能输入数据,而只能在下拉列表里选择? 如何使用treeView和imageList控件?在线等。。。 有没有挖掘网站内容的编程思路,谢谢 大家对一些特殊的json数据源是怎么处理的? 如何在代码中设置打印机的纸张方向?????? 请问:在DATAGRID中,我怎么在单击其中的一栏的事件中获得该栏的某个字段的值? 请问 ClipBoard怎么一次 复制两种格式的数据呢? 正则表达式
用SQL导入功能,选数据源为Access 找到你的Access文件夹,勾选要导的表。。即可
2、查询出Access表中数据,然后循环插入,其实和从EXCEL表中取数据,插入SQL数据库一个道理。
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中呢?
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了
这个是查询xls的 自己百度下 稍微修改下 就直接查询access了