SqlDataReader dr;
dr = SqlCommand.ExecuteReader();
while(dr.Read())
{
msImg的Write方法执行
msImg[i].Write((byte[])SqlReader["ImageData"],0,(int)SqlReader["ImageSize"])
}

解决方案 »

  1.   

    int i=0;
    while(oReader.Read())
    {
      msImg[i].Write((byte[])SqlReader["ImageData"],0,(int)SqlReader["ImageSize"])
      i++;
    }
      

  2.   

    lese9(乐色.Net):
         很明显,dr中有两个记录!
         因为我的SQL语句中WHERE有OR关键字!
         这里我想用msImg[0]的Write方法处理dr中的第一条记录
                用msImg[1]的Write方法处理dr中的第二条记录
               
      

  3.   

    lese9(乐色.Net) :谢谢你!chinchy(人民需要人民币) :
    出现了错误提示:未将对象引用设置到对象的实例!
      

  4.   

    类似这样:sqlda.GetString(1).Trim()
      

  5.   

    那这样呢?
    用GetSchemaTable()方法得到DataTable imgTable
    然后
    for(int i=0;i<2;i++)
        msImg[i].Write((byte[])imgTable.Rows(i).Item["ImageData"]),0,(int)imgTable.Rows(i).Item["ImageSize"]);
    但也出错了!
    说:“System.Data.DataTable.Rows”表示“属性”,此处应为“方法”
      

  6.   

    SqlDataReader SqlReader = CmdObj.ExecuteReader();
          
          DataTable imgTable = SqlReader.GetSchemaTable();
          DataRow imgRow;
          int ii=0;
          while (ii<intPictureNum) {
                imgRow = imgTable.Rows[ii];
                msImg[ii].Write((byte[])imgRow["ImageData"], 0, (int)imgRow["ImageSize"]); 
                ii++;
          } 为什么错误提示说:
    System.ArgumentException: 列“ImageData”不属于表 SchemaTable。
      

  7.   

    while(oReader.Read())
    ==>
    while(SqlReader.Read())
      

  8.   

    //假设图片的ImageID是intCounter位的字符串
        //假设是40位
        public const int intCounter = 40;
        
        //假设验证码是intPictureNum个图片组合而成
        public const int intPictureNum = 4;
        
        //从0到9中取有intCounter位的一个减数strSubtrahend
        public String strSubtrahend;
             
        void Page_Load(Object sender,EventArgs e){      String strConnection = "user id=sa;password=;database=northwind;server=jet-server;Connect Timeout=30";
                
          String[] strArrayPicId = new String[intPictureNum];
          
          IDAndMessage objIDAndMessage = new IDAndMessage(strConnection);
          
          //取一个比较数
          strSubtrahend = objIDAndMessage.GetSubtrahend(intCounter);
          
          //把取得的图片的ID放到数组里
          strArrayPicId = (string[])objIDAndMessage.GetImageID(strSubtrahend,intPictureNum);
          
          MemoryStream[] msImg = new MemoryStream[intPictureNum];
          
          //msImg
          //建立数据库链接
          SqlConnection Con = new SqlConnection(strConnection);
          
          //sql语句中的ImageID的值放在一个数组里
          String[] ImageIDVariable = new String[intPictureNum];
          
          //给数组ImageIDVariable充值
          for (int a=0; a<intPictureNum; a++)
              ImageIDVariable.SetValue("@ImageID" + a.ToString(),a);
          
          //写SqlCmd
          String SqlCmd = "SELECT ImageData,ImageSize FROM ImageStore WHERE ImageID = " + ImageIDVariable[0];          
          int b = 1;
          if (b < intPictureNum) {
             for (int c = 1; c < intPictureNum;c++)
                 SqlCmd = SqlCmd + " or ImageID = " + ImageIDVariable[c];
          }
          
          SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
          
          //给ImageID附值      
          for (int i=0; i<intPictureNum; i++)
            CmdObj.Parameters.Add(ImageIDVariable[i], SqlDbType.Char).Value = strArrayPicId[i];
          
          Con.Open();
          SqlDataReader SqlReader = CmdObj.ExecuteReader();
          
          DataTable schemaTable = SqlReader.GetSchemaTable();
          
          if ( schemaTable != null )
          {
             message.Text = schemaTable.Rows.Count.ToString();
             message1.Text = SqlCmd;
                      
             for ( int i = 0; i < schemaTable.Rows.Count; i++ )
                      {
                         DataRow dataRow = schemaTable.Rows[ i ];
                         //msImg[i].Write((byte[])dataRow["ImageData"], 0, (int)dataRow["ImageSize"]); 
                      }
            
          }
          
          
          SqlReader.Close();      Con.Close();
           
        }
      

  9.   

    上面的是我的原代码
    为什么这个
    schemaTable.Rows.Count.ToString()
    返回的是2呢?
    明明:SqlCmd显示是:
    SELECT ImageData,ImageSize FROM ImageStore WHERE ImageID = @ImageID0 or ImageID = @ImageID1 or ImageID = @ImageID2 or ImageID = @ImageID3
    但是我改成:
    SELECT * FROM ImageStore WHERE ImageID = @ImageID0 or ImageID = @ImageID1 or ImageID = @ImageID2 or ImageID = @ImageID3
    却返回行数是5,我在数据库中也是一个有5个列的表
    怎么用:
    DataTable schemaTable = SqlReader.GetSchemaTable();
    后行和列颠倒了??
      

  10.   

    SqlReader.GetSchemaTable()这个方法有谁用过吗???
      

  11.   

    reader.Read();
    label.Text=reader.GetString(1);