SQLServer数据库之SQLSERVER把dat文件导入数据表的两个方法
小标 2019-03-20 来源 : 阅读 1723 评论 0

摘要:本文主要向大家介绍了SQLServer数据库之SQLSERVER把dat文件导入数据表的两个方法,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

本文主要向大家介绍了SQLServer数据库之SQLSERVER把dat文件导入数据表的两个方法,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

SQLServer数据库之SQLSERVER把dat文件导入数据表的两个方法

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

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

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


 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 ='\t',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文件没有这些限制,比较方便。

使用下面的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 }

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


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


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

本文由职坐标整理并发布,希望对同学们学习SQL Server有所帮助,更多内容请关注职坐标数据库SQL Server数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程