200分 求助:ado.net连接excel

shaka282216034 2005-10-12 02:19:51
在asp.net中怎么使用ado.net连接excel数据源?
怎么把数据库中的数据导如excel啊(用ado.net)?
望高手指点
...全文
331 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
vickyyu 2005-10-12
  • 打赏
  • 举报
回复
//DataSet -〉 Excel
public void CreateExcel(DataSet ds,string typeid,string FileName)
{
HttpResponse resp;
resp = Page.Response;
resp.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");//utf-8

if (typeid=="1")
resp.AppendHeader("Content-Disposition", "attachment;filename=filename.xls");// + FileName);
else
resp.AppendHeader("Content-Disposition", "attachment;filename=filename.xml");// + FileName);

Response.ContentType = "application/ms-excel";
string colHeaders= "", ls_item="";
int i=0;

//定义表对象与行对像,同时用DataSet对其值进行初始化
DataTable dt=ds.Tables[0];
DataRow[] myRow=dt.Select("");

// typeid=="1"时导出为EXCEL格式文件;typeid=="2"时导出为XML格式文件
if(typeid=="1")
{
//取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符
for(i=0;i<dt.Columns.Count;i++)
{
colHeaders+=dt.Columns[i].Caption.ToString()+"\t";
}
colHeaders+="\n";

//向HTTP输出流中写入取得的数据信息
resp.Write(colHeaders);
//逐行处理数据
foreach(DataRow row in myRow)
{
//在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n
for(i=0;i<row.ItemArray.Length-1;i++)
{
ls_item +=row[i].ToString() + "\t";
}
ls_item += row[i].ToString() +"\n";
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
resp.Write(ls_item);
ls_item="";
}
}
else
{
if(typeid=="2")
{
//从DataSet中直接导出XML数据并且写到HTTP输出流中
resp.Write(ds.GetXml());
}
}

if (ds.Tables.Count>0)
ds.Tables.Remove(ds.Tables[0]);

//写缓冲区中的数据到HTTP头文件中
resp.End();
}
vickyyu 2005-10-12
  • 打赏
  • 举报
回复
DataTable tbltemp=(DataTable)Session["TblSource"];
DataTable tblNew=new DataTable();
tblNew.Columns.Add(new DataColumn("姓名",System.Type.GetType("System.String")));
tblNew.Columns.Add(new DataColumn("家庭电话",System.Type.GetType("System.String")));
tblNew.Columns.Add(new DataColumn("手机",System.Type.GetType("System.String")));
foreach(DataRow row in tbltemp.Rows)
{
DataRow rowNew =tblNew.NewRow();
rowNew["姓名"]=row["name"];
rowNew["家庭电话"]=row["hometel"];
rowNew["手机"]="'"+row["mobile"];
tblNew.Rows.Add(rowNew);
}
DataSet ds=new DataSet();
ds.Tables.Add(tblNew);
this.CreateExcel(ds,"1","列表.xls");
if (ds.Tables.Count>0)
ds.Tables.Remove(ds.Tables[0]);
zlp321002 2005-10-12
  • 打赏
  • 举报
回复
/******* 导出到excel
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'

/*********** 导入Excel
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
vickyyu 2005-10-12
  • 打赏
  • 举报
回复
就把EXCEL当作数据库就可以了:

string strConn="Provider=Microsoft.Jet.OleDb.4.0;data source=c:\YourExcelFileName.xls;Extended Properties=Excel 10.0;";
//连接字符串的10.0可根据你的EXCEL版本,修改为11.0或9.0等,我忘记具体是几点零了
OleDbConnection con=new OleDbConnection(strConn);
con.Open();
DataTable tbltemp = new DataTable;
OleDbDataAdapter ada=new OleDbDataAdapter("select * From [Sheet1$]",con);
ada.Fill(tbltemp);
//到此,Excel文件中的内容已经填充到datatable中了
//默认状态,EXCEL文件的第一行被当作列名称了
morality 2005-10-12
  • 打赏
  • 举报
回复
http://www.connectionstrings.com/
长江支流 2005-10-12
  • 打赏
  • 举报
回复
OleDB ,Jet引擎

别外直接用COM操作VBA

www.webmis.com.cn
下的打印操作Excel
renyu732 2005-10-12
  • 打赏
  • 举报
回复
http://www.cnblogs.com/renyu732/archive/2005/06/15/174866.html
mqingqing123 2005-10-12
  • 打赏
  • 举报
回复
http://bbs.aspcool.com/ShowThread.aspx?PostID=21829
ljqdu1982 2005-10-12
  • 打赏
  • 举报
回复
呵呵,已经很详细了!
ye_zi 2005-10-12
  • 打赏
  • 举报
回复
参考一下楼上的吧
qugui 2005-10-12
  • 打赏
  • 举报
回复
<% @Import Namespace="System.Data" %>
<% @Import Namespace="System.Data.OleDb" %>
<HTML>
<HEAD>
<title>如何读取Excel表格中的数据</title>
<script language="C#" runat="server">

void SubmitBtn_Click(object sender, System.EventArgs e)
{
// 获取Excep文件的完整路径
string source = File1.Value;

string ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + source + ";Extended Properties=Excel 8.0";
string query = "SELECT * FROM [Sheet1$]";

OleDbCommand oleCommand = new OleDbCommand(query, new OleDbConnection(ConnStr));
OleDbDataAdapter oleAdapter = new OleDbDataAdapter(oleCommand);
DataSet myDataSet = new DataSet();

// 将 Excel 的[Sheet1]表内容填充到 DataSet 对象
oleAdapter.Fill(myDataSet, "[Sheet1$]");

// 数据绑定
DataGrid1.DataSource = myDataSet;
DataGrid1.DataMember = "[Sheet1$]";
DataGrid1.DataBind();
}

</script>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<H3>如何读取Excel表格中的数据</H3>
请选择Excel表格:<BR>
<INPUT type="file" id="File1" name="File1" runat="server" size="26"><br>
<asp:Button
id="SubmitBtn"
runat="server"
Text="开始显示"
OnClick="SubmitBtn_Click">
</asp:Button><br>
<br>
<asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid>
</form>
</body>
</HTML>
moodboy1982 2005-10-12
  • 打赏
  • 举报
回复
没200分呀,你才90分呀,兄弟。虽然你一次给不了200分,但至少也要贴出100分来呀。
xiaowangtian1117 2005-10-12
  • 打赏
  • 举报
回复
不知道能不能解决你的问题:
http://community.csdn.net/Expert/topic/4278/4278743.xml?temp=.6340296
hw256 2005-10-12
  • 打赏
  • 举报
回复
1、可以先建立ODBC,再用ado.net连接。
2、利用SQL-SEVER 中的功能。
选择指定Excel文件中的数据
SELECT * FROM
OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’,’Excel 5.0;HDR=YES;DATABASE=c:\test.xls’,sheet1$)
将数据导入到指定的Excel文件中
1)如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:
INSERT INTO
OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’,’Excel 5.0;HDR=YES;DATABASE=c:\test.xls’,sheet1$)
SELECT * FROM 表
2)如果Excel文件不存在,也可以用BCP来导出并生成Excel的文件,注意大小写:
1)导出表
EXEC master..xp_cmdshell
’bcp
数据库名.dbo.表名
out "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"’
2)导出查询
EXEC master..xp_cmdshell
’bcp
"SELECT au_fname,au_lname FROM pubs..authors ORDER BY au_lname"
queryout "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"’

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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