仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 610|回复: 8
打印 上一主题 下一主题

[学习教程] NET网页编程之利用OleDb,让Excel操纵与数据库一样复杂。

[复制链接]
若相依 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:25:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在CSDN里搜索一下“初学”两字,竟有三百余篇帖子(也许更多)。有些帖子说,有了asp的基础,只要15天就能很熟悉了,我甚感自己的愚钝。更多帖子是向大家请教初学者适合看书。两个多月的时间(当然平常杂事比较多。以下代码,基础包含了对Excel的一切基本操纵

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Data.OleDb;
usingSystem.Data;
usingSystem.Windows.Forms;
usingSystem.Threading;

namespaceGuideInto
{
publicclassDAL_File
{
publicstaticstringFilePath
{
get;
set;
}

///<summary>
///毗连Excel
///</summary>
///<returns></returns>
publicstaticOleDbConnectionConn()
{
stringconnStr="Provider=Microsoft.Jet.OLEDB.4.0;PersistSecurityInfo=True;DataSource="+FilePath+";ExtendedProperties=Excel8.0;";
OleDbConnectionconn=newOleDbConnection(connStr);

returnconn;
}

///<summary>
///读取一切事情薄
///</summary>
///<returns></returns>
publicstaticDataTableGetAllExeclWorkBook()
{
using(OleDbConnectionconn=Conn())
{
conn.Open();
DataTabledt=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);

returndt;
}
}

///<summary>
///依据Sql读取Excel中的数据
///</summary>
///<paramname="sql"></param>
///<returns></returns>
publicstaticDataSetQuery(stringsql)
{
using(OleDbConnectionconn=Conn())
{
conn.Open();
OleDbDataAdapterda=newOleDbDataAdapter(sql,conn);
DataSetds=newDataSet();
da.Fill(ds,"ds");
returnds;
}
}

///<summary>
///读取指定事情薄中的数据
///</summary>
///<paramname="sheetname"></param>
///<returns></returns>
publicstaticDataTableGetList(stringsheetname)
{
stringsql="select*from["+sheetname+"]";

returnQuery(sql).Tables[0];
}

///<summary>
///判别表指定事情薄是不是存在
///</summary>
///<paramname="sheetname"></param>
///<returns></returns>
publicstaticboolExists(stringsheetname)
{
try
{
stringsql="selecttop1*from["+sheetname+"]";

Query(sql);
returntrue;
}
catch(OleDbExceptionex)
{
if(ex.Message.Contains("不存在"))
returnfalse;
}
returnfalse;
}

///<summary>
///删除execl中指定事情薄
///</summary>
///<paramname="sheetname"></param>
publicstaticvoidDropSheet(stringsheetname)
{
using(OleDbConnectionconn=Conn())
{
using(OleDbCommandcmd=newOleDbCommand())
{
conn.Open();
cmd.Connection=conn;
cmd.CommandText="droptable"+sheetname;
cmd.CommandType=CommandType.Text;

cmd.ExecuteNonQuery();
}
}
}

///<summary>
///拔出数据到事情薄
///</summary>
///<paramname="dt"></param>
publicstaticvoidAddDateToSheet(DataTabledt,ProgressBarbar,Labellb)
{
using(OleDbConnectionconn=Conn())
{
conn.Open();
using(OleDbTransactiontrans=conn.BeginTransaction())
{
try
{

OleDbCommandcmd=newOleDbCommand();
StringBuilderstrSql;
if(dt.Rows.Count>1)
{
bar.Minimum=1;
bar.Maximum=dt.Rows.Count;
lb.Visible=bar.Visible=true;
}
for(intj=0;j<dt.Rows.Count;j++)
{
if(j<=bar.Maximum)
{
bar.Value=j+1;
lb.Text=(bar.Value*100/bar.Maximum).ToString()+"%";
}
Application.DoEvents();

cmd.Transaction=trans;
cmd.Connection=conn;
cmd.CommandType=CommandType.Text;

strSql=newStringBuilder();
strSql.Append("insertinto"+dt.TableName+"(");

for(inti=0;i<dt.Columns.Count;i++)
{
if(i!=dt.Columns.Count-1)
strSql.Append("["+dt.Columns[i].ColumnName+"],");
else
strSql.Append("["+dt.Columns[i].ColumnName+"]");
}

strSql.Append(")values(");
stringvalue;
for(inti=0;i<dt.Columns.Count;i++)
{
value=dt.Rows[j][i].ToString()==""?"null":dt.Rows[j][i].ToString();
if(!string.IsNullOrEmpty(value))
{
value=value.Replace("","");
}

if(GetSheetTypeByInt(dt.Columns[i].DataType.Name)&&i!=dt.Columns.Count-1&&value.Equals("null"))
strSql.Append(value+",");
elseif(GetSheetTypeByInt(dt.Columns[i].DataType.Name)&&i==dt.Columns.Count-1&&value.Equals("null"))
strSql.Append(value);
elseif(GetSheetTypeByInt(dt.Columns[i].DataType.Name)&&i!=dt.Columns.Count-1)
strSql.Append(""+value+",");
elseif(GetSheetTypeByInt(dt.Columns[i].DataType.Name)&&i==dt.Columns.Count-1)
strSql.Append(""+value+"");
elseif(!GetSheetTypeByInt(dt.Columns[i].DataType.Name)&&i!=dt.Columns.Count-1)
strSql.Append(value+",");
elseif(!GetSheetTypeByInt(dt.Columns[i].DataType.Name)&&i==dt.Columns.Count-1)
strSql.Append(value);
}
strSql.Append(")");

cmd.CommandText=strSql.ToString();
cmd.ExecuteNonQuery();
}
trans.Commit();
}
catch(Exceptionex)
{
trans.Rollback();
throwex;
}
}
}
}

//创立Execl事情薄
publicstaticvoidCreateExecl(DataTabledt)
{
using(OleDbConnectionconn=Conn())
{
conn.Open();

using(OleDbCommandcmd=newOleDbCommand())
{
StringBuilderstrSql=newStringBuilder();
strSql.Append("createtable"+dt.TableName+"(");

for(inti=0;i<dt.Columns.Count;i++)
{
if(i==dt.Columns.Count-1)
strSql.Append("["+dt.Columns[i].ColumnName+"]"+ReturnExeclType(dt.Columns[i].DataType.Name)+"null");
else

strSql.Append("["+dt.Columns[i].ColumnName+"]"+ReturnExeclType(dt.Columns[i].DataType.Name)+"null,");
}
strSql.Append(")");

cmd.Connection=conn;
cmd.CommandType=CommandType.Text;
cmd.CommandText=strSql.ToString();
cmd.ExecuteNonQuery();
}
}
}

///<summary>
///Net数据范例与Excel中的数据范例转换
///</summary>
///<paramname="SqlType"></param>
///<returns></returns>
privatestaticstringReturnExeclType(stringSqlType)
{
switch(SqlType.ToLower())
{
case"string":
//case"smalldatetime":
//case"datetime":
return"nvarchar(255)";
case"byte":
return"byte";
case"int32":
return"int";
case"decimal":
return"numeric";
case"tinyint":
return"byte";
case"smalldatetime":
return"datetime";
case"boolean":
return"bit";
default:
returnSqlType;
}
}

///<summary>
///Excel中的数据范例与Net数据范例转换
///</summary>
///<paramname="SqlType"></param>
///<returns></returns>
privatestaticboolGetSheetTypeByInt(stringsheettype)
{
switch(sheettype.ToLower())
{
case"string":
returntrue;
case"smalldatetime":
returntrue;
case"datetime":
returntrue;
default:
returnfalse;
}
}
}
}

我认为,可以通过更加简单的首次编译,而增加第二次编译的负担,来提高java的运行效率。只是将java源代码进行简单的等价转换,而不假设编译成某种虚拟机器的目标格式,而由本地编译器针对性的二次编译。
飘灵儿 该用户已被删除
沙发
发表于 2015-1-18 14:11:57 来自手机 | 只看该作者
主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。
莫相离 该用户已被删除
板凳
发表于 2015-1-26 23:03:21 | 只看该作者
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
若相依 该用户已被删除
地板
 楼主| 发表于 2015-2-5 01:45:22 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
深爱那片海 该用户已被删除
5#
发表于 2015-2-11 02:45:49 | 只看该作者
在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的
若天明 该用户已被删除
6#
发表于 2015-3-1 20:02:17 | 只看该作者
虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
金色的骷髅 该用户已被删除
7#
发表于 2015-3-10 23:37:19 | 只看该作者
ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
8#
发表于 2015-3-17 16:10:31 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
爱飞 该用户已被删除
9#
发表于 2015-3-24 12:16:16 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-6 18:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表