• 用SQLSERVER里的bcp命令或者bulkinsert命令也可以把dat文件导入数据表


    用SQLSERVER里的bcp命令或者bulkinsert命令也可以把dat文件导入数据表

    下面的内容的实验环境我是在SQLSERVER2005上面做的

    之前在园子里看到两篇文章
    《C# 读取纯真IP数据库QQWry.dat获取地区信息》

    《C#如何读取QQ纯真IP数据库》

    里面写了很多C#代码来读取纯真ip数据库里的数据,纯真ip地址数据库实际上就一个dat文件,用到的代码有多复杂,进制转换,什么块操作,移位

    万一数据库改变了,这些代码就不能用了

    我发现QQ也是使用这个ip地址数据库的,所以QQ也是经常不断更新升级,替换这个dat文件,才能准确显示出你的登录地址

    纯真ip地址数据库:qqwry.dat

    纯真ip地址数据库下载:http://www.kuaipan.cn/file/id_4401224786921564.htm

     1 ///<summary>
     2 /// 将索引区字节块中的起始IP转换成Long数组
     3 ///</summary>
     4 ///<param name="ipBlock"></param>
     5 long[] BlockToArray(byte[] ipBlock)
     6 {
     7     long[] ipArray = new long[ipBlock.Length / 7];
     8     int ipIndex = 0;
     9     byte[] temp = new byte[8];
    10     for (int i = 0; i < ipBlock.Length; i += 7)
    11     {
    12         Array.Copy(ipBlock, i, temp, 0, 4);
    13         ipArray[ipIndex] = BitConverter.ToInt64(temp, 0);
    14         ipIndex++;
    15     }
    16     return ipArray;
    17 }

    今天看书,看到原来实际上dat文件里只是存储了一张表的信息,像ip地址库就可以用一张表来存储

    这些dat文件是怎麽产生的呢?原来是从数据库里产生的

    比如:我导出pratice数据库里的test表的数据,使用bcp命令导出,导出excel,dat文件只能使用bcp命令

    1 EXEC master..xp_cmdshell 'bcp pratice.dbo.test out c:abc.dat -T -c '

    清空表数据

    1 --清空表数据
    2 USE [pratice]
    3 GO
    4 TRUNCATE TABLE [dbo].[test]
    5 
    6 SELECT * FROM [dbo].[test]

    将dat文件数据导入到表里可以使用bulkinsertbcp 这两个命令

    1 BULK INSERT [pratice].[dbo].[test] FROM 'c:abc.dat'
    2 --WITH datafiletype ='char',FIELDTERMINATOR ='	',KEEPNULLS 
    3 
    4 EXEC master..xp_cmdshell 'bcp pratice.dbo.test in c:abc.dat -T -c '

    ---------------------------------------------华丽的分割线------------------------------------------------------------------

    就像纯真IP地址库这些dat文件,一般都是把数据存储在数据库里,然后导出dat文件,让应用程序来读取dat文件,这样就不需要安装数据库软件

    但是,比如在SQL2005导出的dat文件或者SQL2008导出的dat文件,不知道导出的格式有没有区别,同样的读取代码能不能用

    从MYSQL导出的dat文件或从MSSQL导出的dat文件是不是一样,是不是 用同样的代码就可以读取到(我不知道MYSQL是否可以导出DAT文件)

    ----------------------------------------------总结---------------------------------------------------------------------

    其实如果知道纯真IP地址数据库的表结构,那么在数据库里新建一张表,然后把dat文件里的数据用bcp或者bulkinsert命令导入数据库里就可以了

    根本不用写C#代码,关键是表结构没有人知道,只有作者知道,这些C#代码还原出来的表结构也不知道是不是就是原来的那张表ip地址数据库

    的表的结构以前一直很好奇,这些dat文件怎麽存储信息的?怎麽生成的?

    今天看书以后才发现,原来这些数据都是从数据库生成的o(∩_∩)o

    我在想怎麽作者不把数据导出为excel 、access、txt等格式,可能数据库支持的office版本比较低吧,连SQL2008都只支持office2003,

    到SQL2012才支持office2007,office里的excel2003行数据只支持66536行,所以导出dat文件没有这些限制,比较方便

    2013-7-1补充:

    使用下面的SQL语句导出dat文件后

    1 EXEC master..xp_cmdshell 'bcp pratice.dbo.test out c:abc.dat -T -c '

    可以用下面C#代码读取dat文件里的数据,如果是写入的话,那么就会把dat文件里的数据先清空,然后把内容写入到dat文件里

    但是我在读取qqwry.dat 纯真ip地址库的时候却读取不出来,在网上查了 ,有人说是因为导出dat文件的时候使用了某一种格式

    所以读取不了,据我所知,使用SQLSERVER2005导出dat文件,是没有任何格式参数可以选择的,估计纯真ip地址库的dat文件

    是使用非SQLSERVER数据库来导出的

    上C#代码 嘻嘻(*^__^*)  ,代码非常简单

     1 using System;
     2 using System.IO;
     3 using System.Windows.Forms;
     4 
     5 namespace dat文件读取测试
     6 {
     7     public partial class Form4 : Form
     8     {
     9         public Form4()
    10         {
    11             InitializeComponent();
    12         }
    13 
    14         /// <summary>
    15         /// 
    16         /// </summary>
    17         /// <param name="sender"></param>
    18         /// <param name="e"></param>
    19         private void button1_Click(object sender, EventArgs e)
    20         {
    21             var t1 = new StreamReader(@"C:qqwry.dat");
    22             textBox1.Text = t1.ReadToEnd().Trim();
    23             t1.Close();
    24 
    25 
    26 
    27         }
    28 
    29         /// <summary>
    30         ///31         /// </summary>
    32         /// <param name="sender"></param>
    33         /// <param name="e"></param>
    34         private void button2_Click(object sender, EventArgs e)
    35         {
    36             File.WriteAllText(@"C:abc.dat", textBox2.Text);
    37         }
    38     }
    39 }
    View Code

    界面是这样的,自己拖个按钮和textbox就可以了

    如果读取的是qqwry.dat文件就会显示下面的内容

    读取abc.dat文件,就可以读出数据

    反正代码很简单,大家可以动手实验一下o(∩_∩)o

  • 相关阅读:
    Microsoft.Office.Inter.Excel.dll在調用時可能會出現如下錯誤
    Proe 导出PDF Vb.net
    给Eclipse安装Google app engine插件
    VC++ 2013 开发windows窗体程序
    GitHub使用说明
    c# 发送邮件
    c# aes 加密解密
    sourceforge软件下载方式
    keyCode转换成值
    前端写代码自动刷新神器Browsersync
  • 原文地址:https://www.cnblogs.com/lyhabc/p/3149747.html
Copyright © 2020-2023  润新知