<%--兼容IE7 必须放在 head 的第一行--%>
独上高楼网站
  • 如何将数据导入到 SQL Server Compact Edition 数据库中(三)
  • 摘要:时隔近半年了,不知道大家是否还记得,我在本系列的第一篇文章的总结中提到,创建 SQL Server CE 数据库表结构的 SQL 语句是可以自动生成的。那么本系列的第三篇文章就向大家介绍一种比较简单的方法。

    ADO.NET 中的 IDataReader.GetSchemaTable 方法可以返回一个 DataTable,它描述了 IDataReader 查询结果中各列的元数据。列的元数据包含了列的名称、数据类型、大小、是否为主键字段、是否为自动增长字段……等等。有了这些元数据,我们就可以通过编写几段 C#/VB.NET 代码,实现创建 SQL Server CE 数据库表结构的 SQL 语句的自动生成。以下方法是生成创建表 SQL 语句的主要代码:

    ///
    ///生成创建数据库表结构的SQL语句。
    ///

    privatestaticstringGenerateTableSchemaSql(IDbConnectionconnection,stringqueryString)
    {
    StringBuildertableSql
    =newStringBuilder();

    IDbCommandcommand
    =connection.CreateCommand();
    command.CommandText
    =queryString;

    try
    {
    /*获取查询结果各列的元数据*/
    DataTableschemaTable
    =null;
    using(IDataReaderreader=command.ExecuteReader(CommandBehavior.KeyInfo))
    {
    schemaTable
    =reader.GetSchemaTable();
    }

    /*生成创建表定义语句*/
    stringtableName=schemaTable.Rows[0]["BaseTableName"].ToString();
    tableSql.Append(
    "CREATETABLE[").Append(tableName).AppendLine("](");

    /*生成各列的定义语句*/
    stringcolumnName;
    stringallowDBNull;
    DataRowrow;
    boolhasKey=false;
    StringBuildersbPKFields
    =newStringBuilder();
    for(inti=0;i<schemaTable.Rows.Count;i++)
    {
    if(i!=0)tableSql.AppendLine(",");

    row
    =schemaTable.Rows[i];
    columnName
    =(string)row["ColumnName"];
    allowDBNull
    =((bool)row["AllowDBNull"]==true"NULL":"NOTNULL");

    if((bool)row["IsKey"])
    {
    sbPKFields.AppendFormat(
    "[{0}],",columnName);
    hasKey
    • 与本文主题相关的文章