现在我想在页面上做一个按钮,当用户点击该按钮时,执行:可以把本地的excel导入到我们服务器上的一个临时表中,然后我再把临时表中的记录更新到另外一个表中,但目前的问题是:我不知道怎么写相关代码,把excel中的数据导入到数据库中的临时表中,不知道有没有解决办法,请各位高手指教,万分感激!!
最好有相关的导入代码,不胜感激!!在线等。。
最好有相关的导入代码,不胜感激!!在线等。。
解决方案 »
- 编译器错误消息: CS0246: 找不到类型或命名空间名称“Class1”(是否缺少 using 指令或程序集引用?)
- 【求一个在IE 6 7 8 FF下能正确显示Fileupload的图片路径的JS】
- 帖间广告怎么做?给点思路
- asp的问题
- 老问题重提 webpart怎么在ajax中拖动第二次(vs2008)
- 请教:datagrid不同列使用不同的交替行色彩的问题
- 怎样将一个自定义控件加入到指定页的底部?
- window 2003 iis6 接口站点处理正常,但响应有问题
- 请问数据读取器中取出的值与已知字符串为什么不相等??
- reportviewer的导航条格式混乱
- 关于WebPart
- asp.net 对话框的问题!
2Services(数据转换服务),然后选择 czdImport Data(导入数据)。
3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。
4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。
5在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。
6在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。下一步,完成。 Transact-SQL语句进行导入导出: 1.在SQL SERVER里查询access数据:
-- ======================================================
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\DB.mdb";User ID=Admin;Password=')...表名
-------------------------------------------------------------------------------------------------
2.将access导入SQL server
-- ======================================================
在SQL SERVER 里运行:
SELECT *
INTO newtable
FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\DB.mdb";User ID=Admin;Password=' )...表名
-------------------------------------------------------------------------------------------------
3.将SQL SERVER表里的数据插入到Access表中
-- ======================================================
在SQL SERVER 里运行:
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source=" c:\DB.mdb";User ID=Admin;Password=')...表名
(列名1,列名2)
select 列名1,列名2 from sql表
实例:
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\db.mdb';'admin';'', Test)
select id,name from Test
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\trade.mdb'; 'admin'; '', 表名)
SELECT *
FROM sqltablename
------------------------------------------------------------------------------------------------- 二、SQL SERVER 和EXCEL的数据导入导出
1、在SQL SERVER里查询Excel数据:
-- ======================================================
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
SELECT *
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
------------------------------------------------------------------------------------------------- 2、将Excel的数据导入SQL server :
-- ======================================================
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
实例:
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
------------------------------------------------------------------------------------------------- 3、将SQL SERVER中查询到的数据导成一个Excel文件
-- ======================================================
T-SQL代码:
EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
参数:S 是SQL服务器名;U是用户;P是密码
说明:还可以导出文本文件等多种格式
实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'
在VB6中应用ADO导出EXCEL文件代码:
Dim cn As New ADODB.Connection
cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"
------------------------------------------------------------------------------------------------ 4、在SQL SERVER里往Excel插入数据:
-- ======================================================
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3) T-SQL代码:
INSERT INTO
OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',
'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]
(bestand, produkt) VALUES (20, 'Test')
------------------------------------------------------------------------------------------------- 总结:利用以上语句,我们可以方便地将SQL SERVER、ACCESS和EXCEL电子表格软件中的数据进行转换,为我们提供了极大方便!
exec sp_addlinkedserver 'SQL_server', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'SQL_server', 'false ',null, '用户名', '密码 ' 先创建一台名为SQL_server的链接服务器
然后SELECT * into SQL_server.dbo.newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
或者select * into openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) from OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
仅做参看,没测试
STRING SQL="SELECT * into #TABLE
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions" STRING SQL2="INSERT INTO TABLE (A,B,C,D) SELECT A,B,C,D FROM #TABLE "
大哥,他是想把本地的导入到远程服务器,也就是说,这sql语句是在远处服务器上执行的,而你这个excel的路径是本地的,肯定不能实现的
先上传excel到服务器,获取excel中的数据,验证。
检查通过插入表中。你光一个按钮不够,加上上传控件。
这种需求也常见吧
{
string strConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\工料机汇总表(石油).xls;Extended Properties='Excel 8.0;HDR=NO'";
//OleDbCommand command;
OleDbDataAdapter ada;
DataSet ds=new DataSet();
protected System.Web.UI.WebControls.DataGrid dg;
OleDbConnection connection;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
connection=new OleDbConnection(strConn);
ada=new OleDbDataAdapter("SELECT * FROM [sheet1$]",connection);
ada.Fill(ds,"all");
//ds.Tables["all"].Rows[0].Delete();
//ds.Tables["all"].Rows[1].Delete();
//ds.Tables["all"].Rows[2].Delete();
//ds.Tables["all"].Rows[3].Delete();
//ds.Tables["all"].Rows[4].Delete();
//ds.Tables["all"].Columns.RemoveAt(0);
//dg.DataSource=ds.Tables["all"].DefaultView;
//dg.DataBind();
DataTable dt=ds.Tables["all"];
//dt.Rows[0].Delete();
//dt.Rows[1].Delete();
//dt.Rows[2].Delete();
//dt.Rows[3].Delete();
/*
dt.Columns.RemoveAt(0);
dt.Rows.RemoveAt(0);
*/
dt.Rows.RemoveAt(1);
dt.Rows.RemoveAt(1);
dt.Rows.RemoveAt(1);
//Response.Write("<table border='1'>");
/*
for(int i=0;i<dv.r;i++)
{
Response.Write("<tr>");
object[] o=ds.Tables["all"].Rows[i].ItemArray;
for(int j=0;j<ds.Tables["all"].Columns.Count;j++)
{
Response.Write("<td>");
Response.Write(ds.Tables["all"].Columns[j].DataType.ToString());
Response.Write("</td>");
}
Response.Write("</tr>");
}
*/
//Response.Write("</table>");
Response.Write("<table border='1' bordercolorlight='#000080' bordercolordark='#000080' align='center'>");
for(int i=0;i<dt.Rows.Count;i++)
{
Response.Write("<tr>");
object[] o=dt.Rows[i].ItemArray;
for(int j=0;j<dt.Columns.Count;j++)
{
Response.Write("<td>");
if(!o[j].ToString().Equals(""))
{
Response.Write(o[j].ToString());
}
else
{
Response.Write(" ");//<font color='red'>(i="+i+",j="+j+")</font>
}
Response.Write("</td>");
}
Response.Write("</tr>");
}
Response.Write("</table>");
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
========================================
我以前的代码
当然.net提供了相关的操作.但是cxcel的里面的特殊格式往往会造成有些东西导入不进.
所以,宁愿选择上面说的原始方法.
{
try
{
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
if (sheetname.IndexOf("$") != sheetname.Length-1)
{
sheetname += "$";
}
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + sheetname + "]", strConn);
DataSet ds = new DataSet();
oada.Fill(ds);
return ds.Tables[0];
}
catch (System.Exception e)
{
return null;
}
}楼主试试这个!!filepath 这个变量用来存储本地excel的路径的。sheetname是excel中有记录的工作表的名字。
filepath的值可以用string filepath = FileUpload1.PostedFile.FileName;来获得。