数据库访问的一些问题

在工作中遇到一些数据库访问的问题,这些问题大多数人都会用到,现将其整理如下:

 

1 一次插入多条记录

Oracle

使用SELECT … FROM DUAL虚表,例如:

INSERT INTO SCC.TEST (TEST1, TEST2, TEST3, TEST4) 

SELECT 'AA', 1, 2.03, TO_DATE('2012-3-20 10:00:00', 'yyyy-MM-dd hh24:mi:ss') FROM DUAL

union all SELECT 'AA', 1, 2.03, TO_DATE('2012-3-20 10:2:34', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL

Oracle除了这个方法,我没有找到其它的方法。

 

SqlServer

使用SELECT …,例如:

INSERT INTO [Table_1]

           ([test1]

           ,[test2]

           ,[test3]

           ,[test4])

           SELECT 'AB', 1.0, 2.345, '2012-3-20 12:34:34'

          union all SELECT 'AB', 1.0, 2.345, '2012-3-20 12:34:34'

           union all SELECT 'AB', 1.0, 2.345, '2012-3-20 12:34:34'

 

也可以使用分号分隔多条sql语句,例:

INSERT INTO [Table_1]

           ([test1]

           ,[test2]

           ,[test3]

           ,[test4])

           SELECT 'AB', 1.0, 2.345, '2012-3-20 12:34:34';

INSERT INTO [ctc].[dbo].[Table_1]

           ([test1]

           ,[test2]

           ,[test3]

           ,[test4])

           SELECT 'AB', 1.0, 2.345, '2012-3-20 12:34:34'

 

2 日期的处理

Oracle 在处理日期类型的数据时必须使用to_date进行转换,sqlserver直接输入日期字符串就行,如上例所示。

 

3 ADO.NET访问接口,使用参数化命令,在.NET 2.0环境下测试

Oracle

    cmd->CommandText = "INSERT INTO SCC.TEST (TEST1, TEST2, TEST3, TEST4) VALUES (:1, :2, :3, :4)";

 

        cmd->Parameters->AddWithValue("1", "aa"); 字段是字符串

cmd->Parameters->AddWithValue("2", "10.34");//字段是NUMBER(10,0),没问题

cmd->Parameters->AddWithValue("2", 10.34);//字段是NUMBER(10,0),赋值浮点数没问题

cmd->Parameters->AddWithValue("2", "aaf"); //报错,无效的数据格式

cmd->Parameters->AddWithValue("3", 1.02); //字段是NUMBER(10,3),正确

cmd->Parameters->AddWithValue("3", “1.02”); //没问题

cmd->Parameters->AddWithValue("4", System::DateTime::Now); 字段是日期类型,正确

cmd->Parameters->AddWithValue("4", "2012-3-20 10:58:34"); //出错,日期类型格式错误

 

        cmd->ExecuteNonQuery();

 

关于ADO.NET访问数据库的接口有两种方法,一个是每个数据库的专用接口例如:Oracle使用OraConnection,OraCommand,等;SqlServer使用SqlConnection,SqlCommand。这些接口的参数化方法Oracle和SqlServer使用上是不同的。

定义参数的时候Oracle使用“:变量名称”,在引用的时候可以加:也可以不加,

SqlServer使用 “@变量名称”,在引用的时候可以加@也可以不加@

 

另外在访问Oracle或SqlServer的时候也可以使用OleDbConnect,OleDbCommand

在访问Oracle数据库时,用法与上面的相同。

在访问SqlServer数据库时,参数处理与SqlCommand的处理方式不同,OleDbCommand参数定义的时候不能使用@而要使用?作为参数声明,在引用的时候不需要指定变量的名字,但要按变量定义的顺序来为参数赋值,不能搞错顺序。

 

在访问Access数据库的时候,由于微软没有提供专用的访问接口,只能使用OleDb的方式,参数化的使用方式同访问SqlServer的方法。

 

注:在参数类型赋值的时候三种方法都是相同的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值