zoukankan      html  css  js  c++  java
  • sql server读取图片类型

    Page.Response.BufferOutput = true;
    Page.Response.ContentEncoding 
    = Encoding.Default;
    Page.Response.Charset 
    = "GB2312";
    Page.Response.ContentType 
    = "image/jpeg";// 这里如果是图片是jpeg或jpg类型的这么写,如果是bmp的写成"image/bmp",gif的为"image/gif"

    //下面是输出图片过程(这是我原来写过的一部分代码)
    private void ShowImage(string id,string TableName)   //ID表示图片在TableName表中的ID
    {
    int len = 4096;
    string conn = "";//连接字符串
    SqlConnection sqlconn = new SqlConnection(conn);
    sqlconn.Open();
    string sText="declare @id varchar(20);";
    sText 
    +="set @id='"+id+"';";
    sText 
    +="select @image=textptr(image),@datalen=datalength(image) from "+TableName+" where id=@id";

    SqlCommand sqlcmd
    =new SqlCommand(sText,sqlconn);

    SqlParameter ptrParam
    = sqlcmd.Parameters.Add("@image",SqlDbType.Binary,16);
    ptrParam.Direction 
    =ParameterDirection.Output;

    SqlParameter datalenParam
    =sqlcmd.Parameters.Add("@datalen",SqlDbType.Int);
    datalenParam.Direction
    =ParameterDirection.Output;

    sqlcmd.ExecuteNonQuery();

    int datalen=int.Parse(datalenParam.Value.ToString());
    datalen 
    -=3;//去除掉'0x0'
    if(datalen<0)
    {
    Response.Write(
    "<script>alert('文档数据不存在,请核查是否由于错误操作删除了文档数据!')</script>");
    return;
    }

    if(datalen<len)
    sText 
    ="readtext "+TableName+".image @point @offset "+datalen;
    else
    sText 
    ="readtext "+TableName+".image @point @offset "+len;

    sqlcmd 
    =new SqlCommand(sText,sqlconn);

    SqlParameter ptrParam1
    =sqlcmd.Parameters.Add("@point",SqlDbType.Binary,16);
    ptrParam1.Value 
    =ptrParam.Value;
    SqlParameter offParam
    =sqlcmd.Parameters.Add("@offset",SqlDbType.Int);
    offParam.Value 
    =0;
    Stream outStream
    =Page.Response.OutputStream;
    BinaryWriter bw
    =new BinaryWriter(outStream,Encoding.Default);

    byte[] buffer=null;
    if(datalen<len)
    buffer 
    =new byte[datalen];
    else
    buffer 
    =new byte[len];

    long retval=0;
    int offset_ctr = 0;

    SqlDataReader dr
    =sqlcmd.ExecuteReader(CommandBehavior.SequentialAccess);
    try
    {
    dr.Read();
    if(datalen<len)
    retval 
    =dr.GetBytes(0,0,buffer,0,datalen);
    else
    retval 
    =dr.GetBytes(0,0,buffer,0,len);

    while(retval>0)
    {
    if(datalen>2*len)
    {
    bw.Write(buffer);
    bw.Flush();
    offset_ctr 
    +=len;
    dr.Close();
    offParam.Value 
    =offset_ctr;
    dr
    =sqlcmd.ExecuteReader(CommandBehavior.SequentialAccess);
    dr.Read();
    retval 
    =dr.GetBytes(0,0,buffer,0,len);
    datalen
    -=len;
    }

    else if(datalen >len)
    {
    bw.Write(buffer);
    bw.Flush();
    datalen 
    -=len;
    offset_ctr 
    +=len;
    buffer 
    =new byte[datalen];
    dr.Close();
    sText 
    ="readtext "+TableName+".image @point "+offset_ctr+" "+datalen;
    sqlcmd
    =new SqlCommand(sText,sqlconn);
    SqlParameter ptr
    =sqlcmd.Parameters.Add("@point",SqlDbType.Binary,16);
    ptr.Value 
    =ptrParam1.Value ;
    dr
    =sqlcmd.ExecuteReader(CommandBehavior.SequentialAccess);
    dr.Read();
    retval 
    =dr.GetBytes(0,0,buffer,0,datalen);
    }

    else
    {
    bw.Write(buffer);
    bw.Flush();
    offset_ctr 
    +=datalen;
    datalen 
    =0;
    buffer 
    =new byte[datalen];
    dr.Close();
    sText 
    ="readtext "+TableName+".image @point "+offset_ctr+" "+datalen;
    sqlcmd
    =new SqlCommand(sText,sqlconn);
    SqlParameter ptr
    =sqlcmd.Parameters.Add("@point",SqlDbType.Binary,16);
    ptr.Value 
    =ptrParam1.Value ;
    offset_ctr 
    +=datalen;
    dr
    =sqlcmd.ExecuteReader(CommandBehavior.SequentialAccess);
    dr.Read();
    retval 
    =dr.GetBytes(0,0,buffer,0,datalen);
    }

    }

    Response.Flush();
    bw.Close();
    outStream.Close();

    }

    catch(Exception ex)
    {
    string ss=ex.Message ;
    }

    Response.End();
    }


    //注:上面的代码是对我原来的代码进行更改之后给你的,你在调试一下吧
  • 相关阅读:
    LINQ 为C#开发的一种类似于SQL的语言
    Perl函数集
    职场新鲜人:为什么女生拼不过男生?
    字符串查找 cmd find命令
    职业规划师:如何给自己挑选一个好老板
    C# const, readonly, static readonly
    转载:抽象工厂模式与工厂方法模式区别
    教育法则
    poj 1509 Glass Beads
    hdu 2602 Bone Collector
  • 原文地址:https://www.cnblogs.com/acelove/p/86293.html
Copyright © 2011-2022 走看看