SqlDataReader dr;
dr = SqlCommand.ExecuteReader();
while(dr.Read())
{
msImg的Write方法执行
msImg[i].Write((byte[])SqlReader["ImageData"],0,(int)SqlReader["ImageSize"])
}
dr = SqlCommand.ExecuteReader();
while(dr.Read())
{
msImg的Write方法执行
msImg[i].Write((byte[])SqlReader["ImageData"],0,(int)SqlReader["ImageSize"])
}
解决方案 »
- 系统中装了IE9和Firefox SuperPreview 中却只有IE6
- 请问一下 .net 2005 谁知道 GridView 固定多表头 和 多列 ?
- 在只有框架的页面里的后台.cs代码里加辨断是否登陆的代码问题,急
- [求助]dropdownlist能绑定两个表中的字段吗?
- Request["ID"]跟Request.Params["ID"]有区别吗?
- 万分火急,问两个问题,关于URL汉字解码以及dotlucene的Hits.Id()的...
- 急,这个字符串如何处理,请指教
- 团购网 统计购买人数
- 没分了,但还是希望大家帮帮我
- 怎么在IMAGEBUTTON上画图?
- 内容里面有'的用Replace如何把单引号 ' 替换掉,否则老无法正确入库
- li8301(1棵忘忧草) 那我想点一个框架中的按钮使一个框架关闭
while(oReader.Read())
{
msImg[i].Write((byte[])SqlReader["ImageData"],0,(int)SqlReader["ImageSize"])
i++;
}
很明显,dr中有两个记录!
因为我的SQL语句中WHERE有OR关键字!
这里我想用msImg[0]的Write方法处理dr中的第一条记录
用msImg[1]的Write方法处理dr中的第二条记录
出现了错误提示:未将对象引用设置到对象的实例!
用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”表示“属性”,此处应为“方法”
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。
==>
while(SqlReader.Read())
//假设是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();
}
为什么这个
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();
后行和列颠倒了??
label.Text=reader.GetString(1);