C#里,用程序在数据库建表有没有什么好方法?

时间:2022-11-23 08:20:32
如题。
今日想做一个这样的程序,程序实现通过一段ORACLE数据库的SELECT 语句,在SQLSERVER上建立一张表,表结构和select语句查询的结果一样,比如ORACLE数据库里面有这样一段语句:select rec_no,time_start,time_end,is_end,article_id from l3_rmlbd.article,我希望通过C#程序能够自动在sqlserver上建立一张表,包含rec_no,time_start,time_end,is_end,article_id 5个字段,字段类型和大小和ORACLE上的l3_rmlbd.article表一样。有没有什么好方法,希望大家赐教!不胜感激。

14 个解决方案

#1


无非就是读取Oracle的表结构,然后再产生对应的建表SQL,再执行。

#2


读取表结构,在根据表结构在去创建,一切都通过sql可以执行

#3


虽然不是太明白 楼主借鉴二楼吧 对于新手来说 多百度 少谷歌 

#4


肯定可以的.在程序里用sql语句可以建表..什么要求都能完成..

#5


字段类型和大小 和约束什么之类的.都有...很简单的..去学下t-sql语句..想怎么建就怎么建.

#6


Create table 表名(

字段1 数据类型,

字段2 数据类型,

字段3 数据类型,

…… ,

姓名 varchar(50) not null,  //非空
身份证 char(18) unique,   //唯一
年龄 int check (年龄>=18 and年龄<=55)  //要求员工的年龄必须是在18到55岁之间。



int char之类的是数据类型
年龄 身份证之类的是字段名.

Create table 是建表命令..
Create table 表1{内容}   这样就建了一个表1   

#7


感谢楼上几位,可能是我表达的不够明白。
如果在程序里面定义好创建好建表的sql语句,然后cmd.ExecuteNonQuery(),这个当然可以,但是我想是通过dataAdapter.Fill方法,将查询语句的结果填充到一实例化的DataTable中,让后用程序读取这个datatable中字段名,字段类型,字段大小等,自动生成create table的sql语句,让后执行cmd.ExecuteNonQuery(),不需要事先写好建表的SQL语句,用什么方法可以达到呢?

#8


Oracle不清楚。不过在SQL Server里的select into可以利用一张既有的表,创建一张只有表结构的空表,大致象这样
select * from sourcetable into targettable where 0=1

#9


引用 8 楼 abbey 的回复:
Oracle不清楚。不过在SQL Server里的select into可以利用一张既有的表,创建一张只有表结构的空表,大致象这样
SQL code
select * from sourcetable into targettable where 0=1

+1

#10


DbCodeDOM

#11


引用 8 楼 abbey 的回复:
Oracle不清楚。不过在SQL Server里的select into可以利用一张既有的表,创建一张只有表结构的空表,大致象这样

SQL code
select * from sourcetable into targettable where 0=1

你好,如果在sql server里没有sourcetable 这张表呢?就像我在7楼说的,我现在有2个数据库,分别是oracle和sql server的,现在已经用.net 写了个实时表同步功能,该功能要求只要提供远程数据库链接和本地数据库链接、远程表名,程序中会检测本地表是否存在,不存在则进行查询远程表结构然后动态生成sql 的创建表命令。创建后,进行第一次的SqlBulkCopy快速复制,过后间隔根据配置文件的作业系统进行定时同步两表数据。目前我的困难就是“不存在则进行查询远程表结构然后动态生成sql 的创建表命令”没找到好方法,其他的功能都完成了。
如果有知道的大侠,望不吝赐教!

#12


异构数据库,就只能字段对应了。
在Oracle找到各个字段的数据类型和字段大小,在你取回数据的时候,
在dataset里是有这些字段的类型和大小的。
在sqlserver里自己创建吧。

#13


恩,参照各位的意见,我写了个方法,已经可以用了,谢谢大家!

#14


引用 13 楼 joeyxiaobin 的回复:
恩,参照各位的意见,我写了个方法,已经可以用了,谢谢大家!


楼主可否分享下最后是怎么实现的?最近也遇到同样的问题

#1


无非就是读取Oracle的表结构,然后再产生对应的建表SQL,再执行。

#2


读取表结构,在根据表结构在去创建,一切都通过sql可以执行

#3


虽然不是太明白 楼主借鉴二楼吧 对于新手来说 多百度 少谷歌 

#4


肯定可以的.在程序里用sql语句可以建表..什么要求都能完成..

#5


字段类型和大小 和约束什么之类的.都有...很简单的..去学下t-sql语句..想怎么建就怎么建.

#6


Create table 表名(

字段1 数据类型,

字段2 数据类型,

字段3 数据类型,

…… ,

姓名 varchar(50) not null,  //非空
身份证 char(18) unique,   //唯一
年龄 int check (年龄>=18 and年龄<=55)  //要求员工的年龄必须是在18到55岁之间。



int char之类的是数据类型
年龄 身份证之类的是字段名.

Create table 是建表命令..
Create table 表1{内容}   这样就建了一个表1   

#7


感谢楼上几位,可能是我表达的不够明白。
如果在程序里面定义好创建好建表的sql语句,然后cmd.ExecuteNonQuery(),这个当然可以,但是我想是通过dataAdapter.Fill方法,将查询语句的结果填充到一实例化的DataTable中,让后用程序读取这个datatable中字段名,字段类型,字段大小等,自动生成create table的sql语句,让后执行cmd.ExecuteNonQuery(),不需要事先写好建表的SQL语句,用什么方法可以达到呢?

#8


Oracle不清楚。不过在SQL Server里的select into可以利用一张既有的表,创建一张只有表结构的空表,大致象这样
select * from sourcetable into targettable where 0=1

#9


引用 8 楼 abbey 的回复:
Oracle不清楚。不过在SQL Server里的select into可以利用一张既有的表,创建一张只有表结构的空表,大致象这样
SQL code
select * from sourcetable into targettable where 0=1

+1

#10


DbCodeDOM

#11


引用 8 楼 abbey 的回复:
Oracle不清楚。不过在SQL Server里的select into可以利用一张既有的表,创建一张只有表结构的空表,大致象这样

SQL code
select * from sourcetable into targettable where 0=1

你好,如果在sql server里没有sourcetable 这张表呢?就像我在7楼说的,我现在有2个数据库,分别是oracle和sql server的,现在已经用.net 写了个实时表同步功能,该功能要求只要提供远程数据库链接和本地数据库链接、远程表名,程序中会检测本地表是否存在,不存在则进行查询远程表结构然后动态生成sql 的创建表命令。创建后,进行第一次的SqlBulkCopy快速复制,过后间隔根据配置文件的作业系统进行定时同步两表数据。目前我的困难就是“不存在则进行查询远程表结构然后动态生成sql 的创建表命令”没找到好方法,其他的功能都完成了。
如果有知道的大侠,望不吝赐教!

#12


异构数据库,就只能字段对应了。
在Oracle找到各个字段的数据类型和字段大小,在你取回数据的时候,
在dataset里是有这些字段的类型和大小的。
在sqlserver里自己创建吧。

#13


恩,参照各位的意见,我写了个方法,已经可以用了,谢谢大家!

#14


引用 13 楼 joeyxiaobin 的回复:
恩,参照各位的意见,我写了个方法,已经可以用了,谢谢大家!


楼主可否分享下最后是怎么实现的?最近也遇到同样的问题