- 如何将数据导入到 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- 与本文主题相关的文章
