python调用ADO处理2进制字段例子

<span style="font-size:18px;"># coding:utf-8 py文件有汉字要这一行!
# 测试不同数据类型的字段: 读取、赋值

"""
-- 建表
CREATE TABLE [dbo].[tableDataType](
    [id] [bigint] IDENTITY(1,1) NOT NULL,
    [colInt] [int] NULL,
    [colVarchar] [varchar](50) NULL,
    [colText] [text] NULL,
    [colNumeric] [numeric](18, 0) NULL,
    [colDecimal] [decimal](18, 0) NULL,
    [colReal] [real] NULL,
    [colBit] [bit] NULL,
    [colDate] [date] NULL,
    [colDateTime] [datetime] NULL,
    [colTimeStamp] [timestamp] NULL,
    [colImage] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
"""

from win32com.client import Dispatch, VARIANT, constants
from ADOConstants import *

oConn = Dispatch('ADODB.Connection')
oConn.ConnectionString = "Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=bs_tjxt20;Data Source=."
oConn.Open()
oConn.CursorLocation = adUseClient # ds.RecordCount 才有效. 否则返回-1!

oCmd = Dispatch('ADODB.Command')
oCmd.ActiveConnection = oConn

ods = Dispatch( 'ADODB.Recordset' )
ods.ActiveConnection = oConn
ods.CursorType = adOpenStatic
ods.LockType = adLockBatchOptimistic

file1 = open( 'd:/pyCpy.rar', 'rb' )
file2 = open( 'd:/Json2Bmp.bmp', 'rb' )

fOut1 = open( 'd:/pyCpy_GetChunk.rar', 'wb' )
fOut2 = open( 'd:/Json2Bmp_GetChunk.bmp', 'wb' )

# 新增
ods.Open( 'select * from tableDataType where 1=0' )
ods.AddNew()
ods.Fields[ 'colInt' ].value     = 1
ods.Fields[ 'colVarchar' ].value = 'Varchar'
ods.Fields[ 'colText' ].value    = 'Test'
ods.Fields[ 'colNumeric' ].value = 1.123
ods.Fields[ 'colDecimal' ].value = 2.234
ods.Fields[ 'colReal' ].value    = 3.345
ods.Fields[ 'colBit' ].value     = 1
ods.Fields[ 'colDate' ].value    = '2015-02-11'
ods.Fields[ 'colDateTime' ].value= '2015-02-11 01:02:03.123'
s = file1.read(); print  type( s ),'s.len=', len( s )
byArr = buffer( s, 0, len( s ) );
v = VARIANT( 0x2000|17, byArr ) # VT_ARRAY    = 0x2000  VT_UI1    = 17 
ret = ods.Fields[ 'colImage' ].AppendChunk( v  )
print 1, ret

ods.AddNew()
ods.Fields[ 'colInt' ].value     = 2
ods.Fields[ 'colVarchar' ].value = 'Varchar'
ods.Fields[ 'colText' ].value    = 'Test'
ods.Fields[ 'colNumeric' ].value = 21.123
ods.Fields[ 'colDecimal' ].value = 22.234
ods.Fields[ 'colReal' ].value    = 23.345
ods.Fields[ 'colBit' ].value     = 0
ods.Fields[ 'colDate' ].value    = '2015-02-11'
ods.Fields[ 'colDateTime' ].value= '2015-02-11 01:02:03.123'
s = file2.read(); print type( s ), 's.len=', len( s )
byArr = buffer( s, 0, len( s ) );
v = VARIANT( 0x2000|17, byArr ) # VT_ARRAY    = 0x2000  VT_UI1    = 17 
ret = ods.Fields[ 'colImage' ].AppendChunk( v )
print 2, ret

ret = ods.UpdateBatch()
print 3, ret

# 读取2进制字段
ods.Close()
ods.Open( 'select * from tableDataType order by id' )
iSize = ods.Fields[ 'colImage' ].ActualSize; print 'size:', iSize
fOut1.write( ods.Fields[ 'colImage' ].GetChunk( iSize ) )
fOut1.close()

ods.MoveNext()
iSize = ods.Fields[ 'colImage' ].ActualSize ; print 'size:', iSize
fOut2.write( ods.Fields[ 'colImage' ].GetChunk( iSize ) )
fOut2.close()</span>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值