在.fmt的帮助下将.dat导出为Xml或可读文件

时间:2011-02-15 22:01:26

标签: sql database vb.net bcp virus

我从http://opendb.lightspeedsystems.com/contentupdate/database.htm下载了一个数据库,它是一个zip存档。无论如何,我的问题是,有两个文件:virussignatures.datvirussignatures.fmt。我听说我应该使用BCP将数据库解压缩为SQL。 virussignatures.fmt的内容是:

8.0
11
1    SQLCHAR       2    64      "~~~~~"            1     VirusName  SQL_Latin1_General_CP1_CI_AS
2    SQLCHAR       2    32      "~~~~~"            2     VirusType           SQL_Latin1_General_CP1_CI_AS
3    SQLCHAR       2    32      "~~~~~"            3     AppSig              SQL_Latin1_General_CP1_CI_AS
4    SQLINT        0    4       "~~~~~"            4     SigStart            ""
5    SQLINT        0    4       "~~~~~"            5     SigEnd              ""
6    SQLCHAR       2    1024    "~~~~~"            6     Signature           SQL_Latin1_General_CP1_CI_AS
7    SQLBIT        1    1       "~~~~~"            7     Test                ""
8    SQLINT        0    4       "~~~~~"            8     CategoryNumber      ""
9    SQLINT        0    4       "~~~~~"            9     SourceNumber        ""
10   SQLDATETIME   0    8       "~~~~~"            10    TransactionTime     ""
11   SQLCHAR       2    50      ""                 11    KBID                SQL_Latin1_General_CP1_CI_AS

我想将virussignatures.dat转换为XML或可理解的TXT。

可以使用Vb.Net完成吗?如果是这样的话?无论如何,如果不是如何做到这一点?

1 个答案:

答案 0 :(得分:1)

记下sqlserver db的位置(本地或服务器上)。我假设当地人。如果您还没有安装SqlServer,请下载SqlExpress。该版本确实附带了client tools

如果您没有数据库,请创建一个数据库,我假设它被称为virussignatures。

创建此表(在(新)数据库的查询窗口中运行它)

CREATE TABLE [dbo].[Virusses](
  VirusName nvarchar(64) NULL,
  VirusType nvarchar(32) NULL,
  AppSig nvarchar(32) NULL,
  SigStart int NULL,
  SigEnd int NULL,
  Signature nvarchar(1024) null,
  Test bit null,
  CategoryNumber int null,
  SourceNumber int null,
  TransactionTime Datetime null,
  KBID nvarchar(50)
);
GO

在本地sql db中导入数据

bcp virussignatures.dbo.Virusses in virussignatures.dat -f virussignatures.fmt -T -S .

阅读:http://msdn.microsoft.com/en-us/library/ms162802.aspx

或者从新查询(在sql management studio中严格点击你的数据库)

BULK INSERT 
    Virusses 
      FROM 'c:\where\ever\your\file\is\virussignatures.dat' 
      WITH 
        ( FORMATFILE = 'c:\where\ever\your\file\is\virussignatures.fmt' );
GO

现在您已准备好基于此c#示例编写vb程序来读取DataSet中的表,并通过在VB.NET程序中实现以下代码来调用WriteXml。

SqlCommand command = new SqlCommand();
command.CommandText = "SELECT * FROM Virussignature";
command.CommandType = CommandType.Text;
command.Connection = new SqlConnection("Your conect string here");
SqlDataAdapter da = new SqlDataAdapter(command); 
DataSet ds = new DataSet();
da.Fill(ds, "Virussignature");
StreamWriter xmlDoc = new StreamWriter("virus.xml"); 
ds.WriteXml(xmlDoc);
xmlDoc.Close();