补充说明:
=============
客户浏览所有记录(包括暂时没有图片的),如果有图片,我已经把图片读取并保存到了WEB服务器指定的IMAGES文件夹中;数据库没有图片地记录,我想在显示的时候,以“暂时没有图片”字样表示。
困扰我的是:
   1:根据客户的选择条件查询出的字段,要显示的字段有50多个,图片只是其中的一个。而且,数据库中没有“图片名称”字段,只有一个“图片数据”字段。每次查询的时候,不可能对“图片数据”字段IS NOT NULL限制。
   2:数据库中的图片我是通过另一个页面独立执行读取并保存到WEB服务器指定的IMAGES文件夹中的,并按照数据库中唯一标识字段命名的。该页面会自动运行保证数据库中图片数据及时的保存在此文件中。
   3:在查询结果浏览页面里,我使用
<img src='images/code<%# container.dataitem("No_code")%>.jpg' width="390" height="290" align="middle">
标签指定的。其中的 No_code 是唯一标识字段,通过<asp:repeater ...>控件与数据库实现绑定,该字段与“数据库图片数据字段中是否为 NULL ”是没有关系的。
   4:我不想单独使用SQL语句再次搜索数据库来判断数据库中图片数据是否为空——糟糕的数据库。
   5:我想通过对WEB服务器中images文件夹中已经保存的图片文件进行搜索,以次判断是否存在已有的图片。如果已经存在图片文件,则img标签指向此文件;否则,则img标签指向一个固定的、写有“暂时没有图片”字样的图片。
=============
本人对ASP.NET涉及到文件搜索的编程能力有限,很希望高手给我指点。
=============
谢谢!

解决方案 »

  1.   

    不太明白你的意思,你是想考虑数据库中没有图片记录时显示“暂时没有图片”还是数据库有记录而实际图片文件并不存在(比如被人为删除)时显示“暂时没有图片”?
    判断文件是否实际存在用File.Exists(string path)方法>>数据库中没有“图片名称”字段,只有一个“图片数据”字段
    没有图片名称字段如何对应图片路径?总不至于要从图片数据字段获取图片数据的Stream,然后再和images下的所有文件对应的流做二进制的比对吧?
      

  2.   

    //需要的SQL语句StrSql
    //读取到SqlDataReader中
    System.Data.SqlClient.SqlDataReader myReader = conn.getDataReader( StrSql );
    if ( myReader.Read() )
    {
    if ( ( myReader[ DestField ] == System.DBNull.Value ) || ( myReader[ DestField ].ToString().Trim() == string.Empty ) )
    {
    //取得本地的图片显示
    string[] arrRequestFileName = ( string[] ) Request.PhysicalPath.ToString().Trim().Split( '\\' );
    int RequestFileNameLen = arrRequestFileName[ arrRequestFileName.GetUpperBound( 0 ) ].ToString().Length;
    int intStart = Request.PhysicalPath.ToString().Trim().Length - RequestFileNameLen;
    string  RequestPhyURL = Request.PhysicalPath.ToString().Remove( intStart, RequestFileNameLen );
    System.IO.FileStream fs = System.IO.File.OpenRead( RequestPhyURL+"\\NoPhoto.gif" );
    byte[] btImage = new byte[ fs.Length ];
    fs.Read( btImage, 0, ( int ) fs.Length );
    Response.BinaryWrite( btImage );
    Response.End();
    }
    else
    {
    //显示数据库中的图片
    byte[] btImage = ( byte[] )myReader[ DestField ];
    Response.BinaryWrite( btImage );
    Response.End(); }
    }
      

  3.   

    在此补充说明,这是一个很难解说的。
    =================================
    有一个项目,采用Oracle数据库,主要是做Mis系统,采用的是PB开发工具;WEB浏览查询仅仅是其中的一个子系统。
    --------------
    数据库的使用,因为Mis系统开发人员不通一点WEB技术。因此,数据库的设计没有考虑到对WEB的任何支持。而且,对于数据库中的BLOB字段,WEB只能独立读取。
    --------------
    情况如下:
    有一个数据库表(有80多个字段),其中只有一个BLOB字段,存放的是“图片数据”,并且没有“图片名称”这一个字段。因此,我是用一个独立的WEB页面程序,直接把数据库表中,所有“图片数据”字段IS NOT NULL的图片数据读出来,每个有数据的“图片数据”生成一个图片文件,并单独存放在指定的images文件夹中(这一点我已经做到了)。图片保存的时候,图片名称是按照数据库表中唯一标识字段命名的。
    (也就是说,数据库设计的时候,每一条记录存放一个图片,无论图片内容是否重复,都是一条记录保存一个图片。而且,每一个图片数据有800K之多,Mis客户端操作员不懂得如何优化图片,只是把扫描到的图片直接保存到数据库,考虑到效率,我采用独立页面处理,并保存到WEB服务器。图片的保存是在Mis系统客户端做的,因此,Mis系统开发人员并没有想到通过WEB上传能力和效率)
    在客户通过WEB查询的时候,根据不同的条件得到不同的结果,每一个结果,相应的对应一个图片显示(但是,并不是每一个记录都存在图片数据,因为所有数据还有待更新,图片暂时没有的情况也存在)。
    ----------------
    我在给客户呈现查询结果的时候,其他文字性的信息通过ADO.NET可以直接访问并显示,而图片的问题,我是根据查询结果中 数据库表唯一标识字段 ,通过IMG标签直接指向我已经保存到WEB服务器images文件中的。这样一来,如果images文件夹中有标识名称一样的图片文件,则可以顺利显示;但是,如果images文件夹没有此标识的图片文件,则img标签应该显示“暂没有图片”字样的图片。
    因为ADO.NET不能直接读取BLOB字段(可通过间接方式),我又不想第二次判断该查询结果中,哪一个记录不存在图片。
    我想通过对images文件夹的所有文件名称搜索遍历,因为images文件夹中图片的名称是按照数据库表中唯一字段命名的。
    ================
    好费劲,我对ASP.NET搜索文件系统中文件的技术和能力有限,希望能给我点帮助。
    我的想法可行吗(不是技术方面,是效率和WEB方面)?有没有更好的方法——但是不要告诉我给数据库表中增加“图片名称”字段(Mis系统开发人员觉得那很麻烦)。
      

  4.   

    i  think that realy to understand.
      

  5.   

    To:ddangerous169(零点烛光):
    =========================
    Can you speaking Chinese?
    =========================
    SOS! SOS!SOS! SOS!SOS! SOS!SOS! SOS!SOS! SOS!SOS! SOS!SOS! SOS!SOS! SOS!SOS! SOS!SOS! SOS!