别人写的,可以参考一下:
DataReader 的默认行为是在整个数据行可用时立即以行的形式加载传入数据。但是,对于二进制大对象 (BLOB) 则需要进行不同的处理,因为它们可能包含数十亿字节的数据,而单个行中无法包含如此多的数据。Command.ExecuteReader 方法具有一个重载,它将采用 CommandBehavior 参数来修改 DataReader 的默认行为。您可以将 CommandBehavior.SequentialAccess 传递到 ExecuteReader 方法来修改 DataReader 的默认行为,以便让 DataReader 按照顺序在接收到数据时立即将其加载,而不是加载数据行。这是加载 BLOB 或其他大数据结构的理想方案。 在将 DataReader 设置为使用 SequentialAccess 时,务必要注意访问所返回字段的顺序。DataReader 的默认行为是在整个行可用时立即加载该行,这使您能够在读取下一行之前按任何顺序访问所返回的字段。但是,当使用 SequentialAccess 时,必须按顺序访问由 DataReader 返回的不同字段。例如,如果查询返回三个列,其中第三列是 BLOB,则必须在访问第三个字段中的 BLOB 数据之前返回第一个和第二个字段的值。如果在访问第一个或第二个字段之前访问第三个字段,则第一个和第二个字段值将不再可用。这是因为 SequentialAccess 已修改 DataReader,使其按顺序返回数据,当 DataReader 已经读取超过特定数据时,该数据将不可用。 当访问 BLOB 字段中的数据时,请使用 DataReader 的 GetBytes 类型化访问器,该访问器将使用二进制数据填充 byte 数组。您可以指定要返回的特定数据缓冲区大小以及从返回的数据中读取的第一个字节的起始位置。GetBytes 将返回 long 值,它表示所返回的字节数。如果向 GetBytes 传递空的 byte 数组,所返回的长值将是 BLOB 中字节的总数。您可以选择将字节数组中的某索引指定为所读取数据的起始位置。 以下示例从 Microsoft SQL Server 中的 pubs 示例数据库中返回发行者 ID 和徽标。发行者 ID (pub_id) 是字符字段,而徽标则是图形,即 BLOB。请注意,由于必须按顺序访问字段,所以将在访问徽标之前访问当前数据行的发行者 ID。 [Visual Basic] 
Dim pubsConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=pubs;") 
Dim logoCMD As SqlCommand = New SqlCommand("SELECT pub_id, logo FROM pub_info", pubsConn) Dim fs As FileStream                 ' Writes the BLOB to a file (*.bmp). 
Dim bw As BinaryWriter               ' Streams the binary data to the FileStream object. Dim bufferSize As Integer = 100      ' The size of the BLOB buffer. 
Dim outbyte(bufferSize - 1) As Byte  ' The BLOB byte() buffer to be filled by GetBytes. 
Dim retval As Long                   ' The bytes returned from GetBytes. 
Dim startIndex As Long = 0           ' The starting position in the BLOB output. Dim pub_id As String = ""            ' The publisher id to use in the file name. ' Open the connection and read data into the DataReader. 
pubsConn.Open() 
Dim myReader As SqlDataReader = logoCMD.ExecuteReader(CommandBehavior.SequentialAccess) Do While myReader.Read() 
  ' Get the publisher id, which must occur before getting the logo. 
  pub_id = myReader.GetString(0)   ' Create a file to hold the output. 
  fs = New FileStream("logo" & pub_id & ".bmp", FileMode.OpenOrCreate, FileAccess.Write) 
  bw = New BinaryWriter(fs)   ' Reset the starting byte for a new BLOB. 
  startIndex = 0   ' Read bytes into outbyte() and retain the number of bytes returned. 
  retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize)   ' Continue reading and writing while there are bytes beyond the size of the buffer. 
  Do While retval = bufferSize 
    bw.Write(outbyte) 
    bw.Flush()     ' Reposition the start index to the end of the last buffer and fill the buffer. 
    startIndex = startIndex + bufferSize 
    retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize) 
  Loop   ' Write the remaining buffer. 
  bw.Write(outbyte) 
  bw.Flush()   ' Close the output file. 
  bw.Close() 
  fs.Close() 
Loop ' Close the reader and the connection. 
myReader.Close() 
pubsConn.Close() 
[C#] 
SqlConnection pubsConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=pubs;"); 
SqlCommand logoCMD = new SqlCommand("SELECT pub_id, logo FROM pub_info", pubsConn); FileStream fs;                          // Writes the BLOB to a file (*.bmp). 
BinaryWriter bw;                        // Streams the BLOB to the FileStream object. int bufferSize = 100;                   // Size of the BLOB buffer. 
byte[] outbyte = new byte[bufferSize];  // The BLOB byte[] buffer to be filled by GetBytes. 
long retval;                            // The bytes returned from GetBytes. 
long startIndex = 0;                    // The starting position in the BLOB output. string pub_id = "";                     // The publisher id to use in the file name. // Open the connection and read data into the DataReader. 
pubsConn.Open(); 
SqlDataReader myReader = logoCMD.ExecuteReader(CommandBehavior.SequentialAccess); while (myReader.Read()) 

  // Get the publisher id, which must occur before getting the logo. 
  pub_id = myReader.GetString(0);     // Create a file to hold the output. 
  fs = new FileStream("logo" + pub_id + ".bmp", FileMode.OpenOrCreate, FileAccess.Write); 
  bw = new BinaryWriter(fs);   // Reset the starting byte for the new BLOB. 
  startIndex = 0;   // Read the bytes into outbyte[] and retain the number of bytes returned. 
  retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);   // Continue reading and writing while there are bytes beyond the size of the buffer. 
  while (retval == bufferSize) 
  { 
    bw.Write(outbyte); 
    bw.Flush();     // Reposition the start index to the end of the last buffer and fill the buffer. 
    startIndex+= bufferSize; 
    retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize); 
  }   // Write the remaining buffer. 
  bw.Write(outbyte); 
  bw.Flush();   // Close the output file. 
  bw.Close(); 
  fs.Close(); 
} // Close the reader and the connection. 
myReader.Close(); 
pubsConn.Close();

解决方案 »

  1.   

    从sql里读出你要的一个src
    然后指定image控件的src就可以了至于怎么读数据库,看你用的数据库了
      

  2.   

    做个假定
    数据库表
    id  imageSrc
    1   a.gif
    2   b.gif
    3   a.gifimage控件,显示id为2的纪录所对应的图片(b.gif)你是这个意思吗?
    是的话咱们再继续
      

  3.   

    兄弟大概刚从ASP 转过来的吧?
    我以前也是做ASP的,不过转学ASPX后,才发现两者有些地方很不相同的。这个问题最后还是由我用另一些方法搞定了。
    代码公开,希望以后大家可以一起学习学习:
    WebForm建一个 asp:image ,ID=Image1
    在codebehind的Page_Load里写以下代码sqlConnection1.Open();
    string picselect="select * from pictures";
    //从表pictures中读出m行n列的表
    SqlCommand sqlcmdSelect = new SqlCommand(picselect,sqlConnection1);  
    // 创建查询对象
    SqlDataReader readSelect = sqlcmdSelect.ExecuteReader();  
    // 返回查询的结果集对象
    //关键在下面
    if(readSelect.Read())   //第一次Read, 是定位在那m行n列的第一行
        { Image1.ImageUrl=readSelect.GetString(0); 
                  //GetString()参数是指定列数
         。。
        再Read一次的时候,是定位到下一行记录
        }
    readSelect.Close();   //记得Close 个read
    sqlConnection1.Close();以上的方法就可以应用到不只图片这么简单的问题了。   :)
    我昨晚研究了到深夜4点了,希望对你们有帮助吧
      

  4.   

    sqlserver(C#)string sConn="data source=yourserver;initial catalog=yourdb;user id=sa;password=";
    string sSql="select imageSrc from yourtable where id='2'";
    sqlConn = new SqlConnection(sConn);
    sqlConn.Open();SqlCommand cmd=new SqlCommand(sSql,sqlConn);
    string src=(string)cmd.ExecuteScalar();
    sqlConn.Close();
    Image1.ImageUrl=src;