字段类型用Image,编程工具用图形控件关联数据库。
将图片读进字符数组,将此数组插入表中的image字段
根据各种语言到相应版面去搜索一下吧
楼主也可以试试用SQL Server来编写一个存储过程,通过参数传递image数据类型,并且可以在存储过程中将日志关闭,避免日志溢出,最后在代码里调用存储过程,就可以了。具体细节可以看sqlserver的联机帮助。或者:
使用 Stream object。微软有提供范例,而且使用对象刚好是SQL Server。微软的Knowledge Base的文章:“Q258038 HOWTO: 使用 ADO Stream 对象访问并修改 SQL Server BLOB 数据”。
 
给一个用vb调用的例子:
注:写图片文件到数据库 
    Col为栏位名,ImgFile为要写到数据库的图片文件名,BockSize为每次写多少字节,缺省为每次写8K字节到数据库 
    Public Sub WriteDB(Col As ADODB.Field, ImgFile As String, Optional BlockSize As Long=8192) 
     Dim byteData() As Byte, FileLength As Long, NumBlocks As Integer 
     Dim LeftOver As Long, SourceFileNum As Integer, i As Integer 
     
     SourceFileNum = FreeFile 
     Open ImgFile For Binary As SourceFileNum 
     FileLength = LOF(SourceFileNum) 
     If FileLength > 50 Then 
     NumBlocks = FileLength \ BlockSize 
     LeftOver = FileLength Mod BlockSize 
     
     ReDim byteData(LeftOver) 
     Get SourceFileNum, , byteData() 
     Col.AppendChunk byteData() 
     ReDim byteData(BlockSize) 
     For i = 1 To NumBlocks 
     Get SourceFileNum, , byteData() 
     Col.AppendChunk byteData() 
     Next 
     End If 
     Close SourceFileNum 
    End Sub 
     
     
    ImgFile为从数据库读出数据写到磁盘的文件名,BlockSize为每次向文件写多少个字节,缺省为8K字节,当ReadDB=True,得到图片文件後,可以用LoadPicter(图片文件名)显示图片到PictureBox或Image框中. 
    Public Function ReadDB(Col As ADODB.Field, ImgFile As String,Optional BlockSize As Long=8192) As Boolean 
     Dim byteData() As Byte, NumBlocks As Integer 
     Dim LeftOver As Long, DestFileNum As Integer, i As Integer 
     Dim ColSize As Long 
     
     On Error GoTo ErrRead 
     ReadDB = False 
     
     'If Dir(ImgFile) <> "" Then Kill ImgFile 
     
     DestFileNum = FreeFile 
     Open ImgFile For Binary As #DestFileNum 
     
     ColSize = Col.ActualSize 
     NumBlocks = ColSize \ BlockSize 
     LeftOver = ColSize Mod BlockSize 
     
     ReDim byteData(LeftOver) 
     byteData() = Col.GetChunk(LeftOver) 
     Put DestFileNum, , byteData() 
     ReDim byteData(BlockSize) 
     For i = 1 To NumBlocks 
     byteData() = Col.GetChunk(BlockSize) 
     Put #DestFileNum, , byteData() 
     Next 
     If LOF(DestFileNum) > 200 Then ReadDB = True 
     Close #DestFileNum 
     Exit Function 
     
    ErrRead: 
     MsgBox "READ PICTURE ERR:" & Err.Number 
     ReadDB = False 
     Exit Function 
    End Function//如果ReadDB=False则写文件失败。 

解决方案 »

  1.   

    一般来说,如果文件小而少,或经常要将数据带走,就可以考虑直接存储在数据库中.
    否则应该直接存放在磁盘上,数据库中仅保存文件名,存放目录,搜索关键字等信息.
    /*--利用 textcopy.exe文件实现在数据库中存储/读取文件 需要textcopy.exe文件,该文件可以在sql 7.0安装光盘找到--转贴自大力--*/--建立存取处理的存储过程
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_textcopy]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[sp_textcopy]
    GOCREATE PROCEDURE sp_textcopy
    @srvname varchar (30), --服务器名
    @login varchar (30),  --用户名
    @password varchar (30),  --密码
    @dbname varchar (30),  --数据库名
    @tbname varchar (30),  --表名
    @colname varchar (30),  --存储文件的字段名
    @filename varchar (30),  --要存取的文件名
    @whereclause varchar (40),  --条件
    @direction char(1) --I 为存储到数据库,O 从数据库中读出成文件
    AS 
    DECLARE @exec_str varchar (255) 
    SELECT @exec_str = 
            'textcopy /S"' + @srvname + 
            '" /U ' + @login + 
            ' /P ' + @password + 
            ' /D ' + @dbname + 
            ' /T ' + @tbname + 
            ' /C ' + @colname + 
            ' /W "' + @whereclause + 
            '" /F "' + @filename + 
            '" /' + @direction 
    EXEC master..xp_cmdshell @exec_str  
    go--调用示例:
    --1.创建示例表和初始化数据
    create table tb(id int,img image)
    insert tb 
    select 1,0x
    union all select 2,0x
    go--2.将文件保存到数据库中
    declare @srv varchar(255),@db sysname,@tb sysname,@col sysname
    select @srv=@@servername --服务器名
    ,@db=db_name() --数据库名
    ,@tb='tb' --表名
    ,@col='img' --列名
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.jpg','where id=1','I' --保存到id=1的记录中,注意条件是:id=1
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.doc','where id=2','I' --保存到id=2的记录中,注意条件是:id=2--3.从数据库中读出保存为文件
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.jpg','where id=1','O' --读出id=1的记录,注意条件是:id=1
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.doc','where id=2','O' --读出id=2的记录,注意条件是:id=2--删除测试环境
    drop table tb
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_textcopy]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[sp_textcopy]-----以上参照邹建大哥的帖子
    http://expert.csdn.net/Expert/topic/2403/2403509.xml?temp=.9905817
      

  2.   

    http://expert.csdn.net/Expert/topic/2403/2403509.xml?temp=.9905817