部分程序为:
代码
SqlCommand cmd=newSqlCommand("select * from table", conn);
conn.Open();//打开网络数据库连接SqlDataAdapter sda=newSqlDataAdapter(cmd);//用SqlDataAdapter执行cmdDataTable dtt=newDataTable();//填充数据表元数据信息sda.FillSchema(dtt, SchemaType.Mapped);//这里用FillSchema方法,从网络数据库获取数据表元数据信息for(inti=0; i
{stringcolumnName="";stringtype="";stringLenght="";
columnName=dtt.Columns[i].ColumnName;
type=dtt.Columns[i].DataType.Name;
Lenght=dtt.Columns[i].MaxLength.ToString();switch(type.ToLower())
{case"string":
createTableSql=createTableSql+columnName+"[varchar] ("+Lenght+"),";break;case"int32":
createTableSql=createTableSql+columnName+"[int],";break;case"int64":
createTableSql=createTableSql+columnName+"[bigint],";break;case"int16":
createTableSql=createTableSql+columnName+"[smallint],";break;case"object":
createTableSql=createTableSql+columnName+"[binary],";break;case"boolean":
createTableSql=createTableSql+columnName+"[bit],";break;case"datetime":
createTableSql=createTableSql+columnName+"[datetime],";break;case"decimal":
createTableSql=createTableSql+columnName+"[decimal],";break;case"double":
createTableSql=createTableSql+columnName+"[float],";break;case"single":
createTableSql=createTableSql+columnName+"[real],";break;case"byte":
createTableSql=createTableSql+columnName+"[tinyint],";break;case"byte[]":
createTableSql=createTableSql+columnName+"[image],";break;default:
createTableSql=createTableSql+columnName+"[varchar](255),";break;
}
}
我这里得到的type类型是int32、Byte[],但是在数据库中的类型是int、Image。我用什么方法可以得到“Image”这个字符串,并在程序中输出啊?
用上述方法对一些类型无法处理,比如数据库中money、decimal类型在c#中得到的type都是decimal,无法还原为money类型。(如果可以转化的话,提出来同样感谢!)
补充说明:程序的作用是获取网络数据库上查询出来字段的元数据(名称、类型、长度等),然后在本地建立一个具有相同类型的数据表,并导入查询的数据,导入的方法为:
SqlDataReader drdata = cmd.ExecuteReader(); //用SqlDataReader再次执行cmd
SqlBulkCopy bulk = new SqlBulkCopy(NewConn); //创建本地的SqlBulkCopy
bulk.DestinationTableName = "[" + temptable + "]";
bulk.WriteToServer(drdata); //把网络数据表的数据COPY到本地临时数据表
因为SqlBulkCopy要求导入的目标表的结构要和原表结构完全相同,所以要得到原表字段类型。
如果哪位大侠能用其他方式实现同样操作,同样感谢!(本人第一次做此类型功能,方法如果过于复杂,请提出建议!)