把以"文本文件(制表符分割)"保存的EXCEL文件导进SQLSERVER2000的DEMO!...

     任务:使用asp.net把*.zip包中压缩好的相同式样的excel数据文件导入SQL SERVER2000.


     汗,我真不知道怎么组织这个篇文章,应该是很小儿科目的东西.再是我认为写出来对新手还是有点看看的价值的。那天同学偷懒找我给他做个小TASK,要求用把*.zip包中压缩好的相同式样的excel数据文件导入SQL SERVER2000.由于没有接触到excel方面的开发,我想当然的认为Sql Server 2000 的OPENDATASOURCE  +  Jet OLE DB 提供程序即可完成任务,经过N次的尝试,錯誤N次。直到我把用来测试的excel文件打开之后,准备另存为时才发现其是以"文本文件(制表符分割)"保存的!此才豁然开朗,把測試用excel数据文件直接重命名为.TXT文件,使用BULK INSERT语句解决!
 首先,我把此excel文件另存为excel工作簿文档,使用以下代码来获得它的表结构:

ContractedBlock.gif ExpandedBlockStart.gif 获得表结构代码
1None.gifSELECT * into xk_customer
2None.gifFROM OpenDataSource'Microsoft.Jet.OLEDB.4.0',
3None.gif  'Data Source="c:\my.xls";Extended properties=Excel 8.0')dot.gif[my$]
4None.gif

再手工给xk_customer表添加一個标识字段。

 接着,我创建了用于导入数据的存储过程如下:

ContractedBlock.gif ExpandedBlockStart.gif 数据导入存储过程
 1None.gifCREATE  Proc xk_ImportData
 2None.gif(
 3None.gif@path nvarchar(2000)
 4None.gif)
 5None.gifAS
 6None.gif---------参数说明:要导入的数据文件的路径------
 7None.gif
 8None.gifCREATE TABLE [##Import3] (
 9None.gif    [MAC地址] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
10None.gif    [短号] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
11None.gif    [主叫号码] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
12None.gif    [被叫号码] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
13None.gif    [开始时间] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
14None.gif    [时长] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
15None.gif    [费率] [float] NULL ,
16None.gif    [费用] [float] NULL ,
17None.gif    [客户] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
18None.gif    [通话类型] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL 
19None.gifON [PRIMARY]
20None.gif
21None.gif
22None.gifDECLARE  @sql varchar(5000)
23None.gif--Set @temp='c:\aaa.txt'
24None.gifSet @sql='BULK INSERT ##Import3'+
25None.gif         ' FROM  '+''''+ @path+''''+'
26None.gif   WITH 
27None.gif      (
28None.gif         FIELDTERMINATOR = '+''''+'\t'+''''+','+
29None.gif         'ROWTERMINATOR = '+''''+'\n'+''''+
30None.gif     ' )'
31None.gif--print @sql
32None.gifEXEC (@sql)
33None.gif
34None.gifINSERT INTO [xk_customer]([MAC地址][短号][主叫号码][被叫号码][开始时间][时长][费率][费用][客户][通话类型])
35None.gifSELECT [MAC地址][短号][主叫号码][被叫号码][开始时间][时长][费率][费用][客户][通话类型] 
36None.gifFROM ##Import3 WHERE 客户<>'' AND MAC地址<>'' ORDER BY 开始时间
37None.gifDrop table ##Import3
38None.gif
39None.gif
40None.gif

  任务完成了一半,接下来是使用ASP.NET做的一个前台程序了,其下的JavaScript的代码使inputFile的path不為空的時候,方使UpLoad-Button可用!·。 

ContractedBlock.gif ExpandedBlockStart.gif HTML页代码
 1None.gif<form id="Form1" method="post" runat="server">
 2None.gif            <INPUT id="txtFileName" type="file" name="txtFileName" onchange="enable_buttons()" runat="server">
 3None.gif            <asp:button id="btnUpload" runat="server" Text="上传" Width="56px"></asp:button>&nbsp;
 4None.gif            <asp:button id="btnCancel" runat="server" Text="取消" Width="56px"></asp:button>
 5ExpandedBlockStart.gifContractedBlock.gif            <script language="javascript">dot.gif
 6InBlock.gifthis.onload = setfocus;
 7InBlock.giffunction setfocus()
 8ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{    
 9InBlock.gif    document.getElementById("btnUpload").style.display="none";
10InBlock.gif    document.getElementById("btnCancel").style.display="none";
11ExpandedSubBlockEnd.gif}

12InBlock.giffunction enable_buttons()
13ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
14InBlock.gif    document.getElementById("btnUpload").style.display="";
15InBlock.gif    document.getElementById("btnCancel").style.display="";
16ExpandedSubBlockEnd.gif}
    
17ExpandedBlockEnd.gif            
</script>
18None.gif        </form>
  关于主要的功能类,还是要说明一下的,其实现了zip包的解压、文件的上传、和数据库操作。解压组件使用了开源的 SharpZipLib。代码入下:
ContractedBlock.gif ExpandedBlockStart.gif 主要功能类
  1None.gifusing System;
  2None.gifusing System.Text;
  3None.gifusing System.Collections;
  4None.gifusing System.IO;
  5None.gifusing System.Diagnostics;
  6None.gifusing System.Runtime.Serialization.Formatters.Binary;
  7None.gifusing System.Data;
  8None.gif
  9None.gifusing ICSharpCode.SharpZipLib.BZip2;
 10None.gifusing ICSharpCode.SharpZipLib.Zip;
 11None.gifusing ICSharpCode.SharpZipLib.Zip.Compression;
 12None.gifusing ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 13None.gifusing ICSharpCode.SharpZipLib.GZip;
 14None.gif
 15None.gifnamespace XingKeNetWork.Components
 16ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 17ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
 18InBlock.gif    /// Tool 的摘要说明。
 19ExpandedSubBlockEnd.gif    /// </summary>

 20InBlock.gif    public class Tool
 21ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 22InBlock.gif        public Tool()
 23ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 24InBlock.gif            //
 25InBlock.gif            // TODO: 在此处添加构造函数逻辑
 26InBlock.gif            //
 27ExpandedSubBlockEnd.gif        }

 28InBlock.gif
 29ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 30InBlock.gif        /// 文件解压函数
 31InBlock.gif        /// </summary>
 32InBlock.gif        /// <param name="stream">上传的文件流</param>
 33InBlock.gif        /// <param name="mFileName">返回文件名称</param>
 34ExpandedSubBlockEnd.gif        /// <param name="sSavePath">文件保存路径</param>

 35InBlock.gif        private static void UnZipFile(Stream  stream,out string mFileName,string sSavePath)
 36ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 37InBlock.gif            ZipInputStream s = new ZipInputStream(stream);
 38InBlock.gif            string temp="";
 39InBlock.gif
 40InBlock.gif            ZipEntry theEntry;
 41InBlock.gif            while ((theEntry = s.GetNextEntry()) != null
 42ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 43InBlock.gif            
 44InBlock.gif                //Console.WriteLine(theEntry.Name);
 45InBlock.gif            
 46InBlock.gif                string directoryName = Path.GetDirectoryName(theEntry.Name);
 47InBlock.gif                string fileName      = Path.GetFileName(theEntry.Name);
 48InBlock.gif                temp=Path.GetFileNameWithoutExtension(theEntry.Name)+".txt"//使Excel文件另存为Text格式的文件,返回问文件名
 49InBlock.gif            
 50InBlock.gif                // create directory
 51InBlock.gif                Directory.CreateDirectory(directoryName);
 52InBlock.gif            
 53InBlock.gif                if (fileName != String.Empty) 
 54ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 55InBlock.gif                    //Path.GetFileNameWithoutExtension 
 56InBlock.gif                    //FileStream streamWriter = File.Create(theEntry.Name);
 57InBlock.gif                    if (System.IO.File.Exists(sSavePath+temp))
 58ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
 59InBlock.gif                      File.Delete(sSavePath+temp);
 60ExpandedSubBlockEnd.gif                    }

 61InBlock.gif                    FileStream streamWriter = File.Create(sSavePath+temp);//创建文件
 62InBlock.gif                    //FileStream streamWriter = File.Create(@"C:\TempFiles\"+temp);
 63InBlock.gif                                
 64InBlock.gif                    int size = 2048;
 65InBlock.gif                    byte[] data = new byte[2048];
 66InBlock.gif                    while (true
 67ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
 68InBlock.gif                        size = s.Read(data, 0, data.Length);
 69InBlock.gif                        if (size > 0
 70ExpandedSubBlockStart.gifContractedSubBlock.gif                        dot.gif{
 71InBlock.gif                            streamWriter.Write(data, 0, size);
 72ExpandedSubBlockEnd.gif                        }
 
 73InBlock.gif                        else 
 74ExpandedSubBlockStart.gifContractedSubBlock.gif                        dot.gif{
 75InBlock.gif                            break;
 76ExpandedSubBlockEnd.gif                        }

 77ExpandedSubBlockEnd.gif                    }

 78InBlock.gif                
 79InBlock.gif                    streamWriter.Close();
 80ExpandedSubBlockEnd.gif                }

 81ExpandedSubBlockEnd.gif            }

 82InBlock.gif            mFileName=temp;
 83InBlock.gif            s.Close();
 84InBlock.gif
 85ExpandedSubBlockEnd.gif        }

 86InBlock.gif
 87InBlock.gif
 88ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 89InBlock.gif        /// 文件上传,支持多文件上传
 90InBlock.gif        /// </summary>
 91InBlock.gif        /// <param name="sSavePath">保持路径</param>
 92ExpandedSubBlockEnd.gif        /// <returns>返回文件的路径集合</returns>

 93InBlock.gif        public static ArrayList UpLoad_FileAttachment(string sSavePath)
 94ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 95InBlock.gif            ArrayList array=new ArrayList();;
 96InBlock.gif            System.Web.HttpFileCollection myFiles=System.Web.HttpContext.Current.Request.Files;
 97InBlock.gif            System.Web.HttpPostedFile myPostedFile;
 98InBlock.gif            for (int i=0;i<=myFiles.Count-1;i++)
 99ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
100InBlock.gif                string temp;
101InBlock.gif                myPostedFile=myFiles[i];
102InBlock.gif                int nFileLen = myPostedFile.ContentLength;
103InBlock.gif                if (nFileLen != 0)
104ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
105InBlock.gif                   UnZipFile(myPostedFile.InputStream,out temp,sSavePath);
106InBlock.gif                   array.Add(temp);
107ExpandedSubBlockEnd.gif                }

108ExpandedSubBlockEnd.gif            }

109InBlock.gif            return array;
110ExpandedSubBlockEnd.gif         }
     
111InBlock.gif
112ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
113InBlock.gif        /// 导入数据库
114InBlock.gif        /// </summary>
115InBlock.gif        /// <param name="path">要导入的文件路径</param>
116ExpandedSubBlockEnd.gif        /// <returns>受影响行数</returns>

117InBlock.gif        public static int InsertToData(string path)
118ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
119InBlock.gif            Database data=new Database();
120ExpandedSubBlockStart.gifContractedSubBlock.gif            System.Data.SqlClient.SqlParameter[] param=dot.gif{
121InBlock.gif                                     data.MakeInParam("@path",SqlDbType.NVarChar,2000,path)
122ExpandedSubBlockEnd.gif                                 }
;
123InBlock.gif            int i=data.RunProc("xk_ImportData",param,1);
124InBlock.gif            return i;     
125ExpandedSubBlockEnd.gif        }

126ExpandedSubBlockEnd.gif    }

127ExpandedBlockEnd.gif}

完整的演示代码: 下载






转载于:https://www.cnblogs.com/Rimbaud/archive/2006/04/30/389716.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值