您的位置:程序门 -> .net技术 -> c#



大家帮我看看为什么我的写法会报错呀。。参数ms 无效呀。。拜托大家了


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


大家帮我看看为什么我的写法会报错呀。。参数ms 无效呀。。拜托大家了[已结贴,结贴人:ke5315309]
发表于:2007-01-22 19:53:01 楼主
string   connectionstring   = "server=.;uid=sa;pwd=;database=system ";          
sqlconnection   conn=new   sqlconnection(connectionstring);
string   sql= "select   *   from   table1 ";
sqlcommand   command   =   new   sqlcommand(sql,conn);
conn.open();
sqldatareader   dr   =   command.EXECutereader();
if(dr.read())
{
                            byte[]   image   =(byte[])dr[0];    
    memorystream   ms   =   new   memorystream(image);  
    this.picturebox1.image   =   image.fromstream(ms);
}
else
{  
messagebox.show( "没有成功读入数据! ")   ;
     
}
发表于:2007-01-22 19:54:051楼 得分:0
大家来帮我想想办法呀。。我想了好久了都没想去来呀
发表于:2007-01-22 19:55:092楼 得分:50
报的什么错啊,贴出来看下...
发表于:2007-01-22 19:58:143楼 得分:0
是运行阶段还是编译阶段报错?using   system.io加上了吗?
发表于:2007-01-22 20:00:204楼 得分:0
未处理的“system.argumentexception”类型的异常出现在   system.drawing.dll   中。

其他信息:   使用了无效参数。
发表于:2007-01-22 20:01:335楼 得分:0

加了   using   system.io
就是报             “使用了无效参数。”
发表于:2007-01-22 20:04:006楼 得分:0
关注一下,我也想知道是什么原因.
发表于:2007-01-22 20:05:537楼 得分:0
大家近来帮帮我呀。。。。谢谢
发表于:2007-01-22 20:08:058楼 得分:0
断点调试一下,看看你的image   是否为空啊?
发表于:2007-01-22 20:10:399楼 得分:0
单步调试
发表于:2007-01-22 20:11:3310楼 得分:0
看了。。不是空的呀
发表于:2007-01-22 20:13:0611楼 得分:0
大家有没有从数据库读取图片的实例。。。贴出来看看呀
发表于:2007-01-22 20:16:0212楼 得分:0
具体是在哪句出现的异常?
发表于:2007-01-22 20:19:5013楼 得分:0
这样试下看看:

byte[]   image   =(byte[])dr[0];  
memorystream   mystream   =   new   memorystream(image,   true);
mystream.write(image,   0,   image.length);
this.picturebox1.image   =   image.fromstream(mystream);

也不确定..
发表于:2007-01-22 20:32:2414楼 得分:0
还是和以前一样呀。。还是报这样的错呀           “使用了无效参数”
发表于:2007-01-22 20:35:1815楼 得分:0
感觉没什么问题的...

另外检查一下,image是不是第一个字段?
发表于:2007-01-22 20:39:4116楼 得分:0
create   table   table1

aa   image,
bb   varchar(200)
)

你看是不是第一个呀。。。。。这个问题好久还没解决呀。。哭呀。。。
发表于:2007-01-22 20:40:0717楼 得分:0
try..

sqldatareader   dr   =   command.EXECutereader(commandbehavior.sequentialaccess);
发表于:2007-01-22 20:41:4418楼 得分:0
以前做过类似的,不过没有显示在picturebox中,而是存储在了硬盘中..
发表于:2007-01-22 20:42:5119楼 得分:0
还有一样的。       “使用了无效参数”。我是用vs2003     会不会和这个有关系呀
发表于:2007-01-22 20:46:4020楼 得分:0
应该不会吧...

你断点调试一下,看哪句代码出现的问题??

memorystream   ms   =   new   memorystream(image);
this.picturebox1.image   =   image.fromstream(ms);

前一句还是后一句啊?

到底是哪个参数无效?
发表于:2007-01-22 20:47:2221楼 得分:0
会不会还与你存储时的操作有关?

你是怎么将图片存进去的?
发表于:2007-01-22 20:52:5322楼 得分:0
是ms这个参数呀。。
我存的时候调用   byte[]   photo   =   getphoto(this.openfiledialog1.filename);     这个函数啊。。帮我看看呀。。。有没有错呀
private   void   button2_click(object   sender,   system.eventargs   e)
{
//this.picturebox1.image=null;
try
{
byte[]   photo   =   getphoto(this.openfiledialog1.filename);
sqlconnection   nwindconn   =   new   sqlconnection( "server=.;database=system;uid=sa;pwd=; ");

sqlcommand   addemp   =   new   sqlcommand( "insert   into   table1(aa)   values( ' "+photo+ " ') ",   nwindconn);  

nwindconn.open();

addemp.EXECutenonquery();

nwindconn.close();
}
catch(sqlexception   x)
{
messagebox.show(x.message);
}

}

public   static   byte[]   getphoto(string   filepath)
{
filestream   fs   =   new   filestream(filepath,   filemode.open,   fileaccess.read);
binaryreader   br   =   new   binaryreader(fs);
byte[]   photo   =   br.readbytes((int)fs.length);
br.close();
fs.close();
return   photo;
}
发表于:2007-01-22 20:55:4423楼 得分:0
这样吧,你把你的代码都贴出来,我帮你测试看看...
发表于:2007-01-22 21:00:3524楼 得分:0
恩恩   。。。好   的。。谢谢了。。。


private   void   新增学生表_load(object   sender,   system.eventargs   e)
{

}

private   void   button1_click(object   sender,   system.eventargs   e)   //浏览要添加的图片
{
if(this.openfiledialog1.showdialog()==dialogresult.ok)
{
try
{
this.picturebox1.image=image.fromfile(this.openfiledialog1.filename);
}
catch(exception   x)
{
messagebox.show( "图片的像素过大 "+x.message);
}

   
}
}

private   void   button2_click(object   sender,   system.eventargs   e)     //存储sql图片
{
//this.picturebox1.image=null;
try
{
byte[]   photo   =   getphoto(this.openfiledialog1.filename);
sqlconnection   nwindconn   =   new   sqlconnection( "server=.;database=system;uid=sa;pwd=; ");

sqlcommand   addemp   =   new   sqlcommand( "insert   into   table1(aa)   values( ' "+photo+ " ') ",   nwindconn);  

nwindconn.open();

addemp.EXECutenonquery();

nwindconn.close();
}
catch(sqlexception   x)
{
messagebox.show(x.message);
}

}

public   static   byte[]   getphoto(string   filepath)     //函数
{
filestream   fs   =   new   filestream(filepath,   filemode.open,   fileaccess.read);
binaryreader   br   =   new   binaryreader(fs);
byte[]   photo   =   br.readbytes((int)fs.length);
br.close();
fs.close();
return   photo;
}

private   void   button3_click(object   sender,   system.eventargs   e)   //读取   sql图片
{
try
{
string   connectionstring   = "server=.;uid=sa;pwd=;database=system ";          
sqlconnection   conn=new   sqlconnection(connectionstring);
string   sql= "select   aa   from   table1   where   bb= 'keling ' ";
sqlcommand   command   =   new   sqlcommand(sql,conn);
conn.open();
sqldatareader   dr   =   command.EXECutereader(commandbehavior.sequentialaccess);
if(dr.read())
{
        //byte[]   image   =(byte[])dr[0];  
//memorystream   ms   =   new   memorystream(((byte[])dr[ "aa "]));  
//this.picturebox1.image   =   image.fromstream(ms,true);
byte[]   image   =(byte[])dr[ "aa "];  
memorystream   mystream   =   new   memorystream(image,   true);
mystream.write(image,   0,   image.length);
this.picturebox1.image   =   image.fromstream(mystream);

}
else
{  
messagebox.show( "没有成功读入数据! ")   ;
     
}
               
conn.close();
}
catch(exception   x)
{
messagebox.show(x.message);
}
     
               
}
发表于:2007-01-22 21:01:1325楼 得分:0
麻烦你了。。。谢谢哦
发表于:2007-01-22 21:04:2526楼 得分:0
关注,建议楼主先搜索看看别人是怎么在数据库里存储图像的
发表于:2007-01-22 21:06:2627楼 得分:0
你改成用参数的形式试试:

                        sqlcommand   addemp   =   new   sqlcommand( "insert   into   table1(aa)   values(@image) ",   nwindconn);
                        addemp.parameters.add( "@image ",   pthoto);
发表于:2007-01-22 21:15:0928楼 得分:0
好的。谢谢我采纳你们的意见。。。我先试试。。好像不是存储图像时出错呀。。我上次取到硬盘上可以读的出来。。我的存储方法是从vs的帮助里找到的。。因该不会错吧。。。
发表于:2007-01-22 21:15:2829楼 得分:0
搞定了吗?

我显示正常...
发表于:2007-01-22 21:18:1130楼 得分:0
原因很简单,就是因为你插入时有问题..

sqlcommand   addemp   =   new   sqlcommand( "insert   into   table1(aa)   values( ' "+photo+ " ') ",   nwindconn);  

既然photo是二进制数组,你怎么能用单引号将photo引起来呢?
发表于:2007-01-22 21:20:0731楼 得分:0
我改成用参数形式就ok了..

.....
byte[]   photo   =   getphoto(this.textbox1.text);
                                sqlconnection   nwindconn   =   new   sqlconnection( "server=.;database=test;uid=sa;pwd=0421 ");

                                sqlcommand   addemp   =   new   sqlcommand( "insert   into   table1(aa)   values(@image) ",   nwindconn);
                                addemp.parameters.addwithvalue( "@image ",   photo);

                                nwindconn.open();

                                addemp.EXECutenonquery();

......

我的是vs2005,所以用的addwithvalue,你2003可以用add方法...

试试看吧...
发表于:2007-01-22 21:26:1132楼 得分:0
恩恩。。。好了哦。。谢谢哦。。
要怎么样给分给你呀。。我不会给分呀。。
发表于:2007-01-22 21:28:1533楼 得分:0
介意把你的qq给我吗。。下次有问题在问你呀。。
发表于:2007-01-22 21:33:3834楼 得分:0
为什么要用
                              sqlcommand   addemp   =   new   sqlcommand( "insert   into   table1(aa)   values(@image) ",   nwindconn);
                                addemp.parameters.addwithvalue( "@image ",   photo);
这个呀
发表于:2007-01-22 21:37:0835楼 得分:0
看到上面的 "回复   ¦   收藏此页   ¦   专题   ¦   公告   ¦   管理   ¦   保存   ¦   关闭窗口 "

选择 "管理 "进入后就应该知道了..
发表于:2007-01-22 21:38:2436楼 得分:0
to:
sqlcommand   addemp   =   new   sqlcommand( "insert   into   table1(aa)   values(@image) ",   nwindconn);
                                addemp.parameters.addwithvalue( "@image ",   photo);

至少不能像你那样用,因为它是字节数组,所以不能用单引号引起来...
发表于:2007-01-22 21:44:1037楼 得分:0
哦..知道了。谢谢了。。
如果我用       insert   into   table1(aa)   values( " "+photo+ " ")。这样可以吗
发表于:2007-01-22 21:46:1538楼 得分:0

while   (sqldatareader.read())
{
//这里   改这个地方(   byte[]   image   =(byte[])dr[0];   )
memorystream   memorystream=new   memorystream(sqldatareader.getsqlbinary(1).value);

image   listviewimage=image.fromstream   (memorystream);
imagelist.images.add(listviewimage);  
}
this.listview1.smallimagelist=imagelist;
发表于:2007-01-22 21:47:3839楼 得分:0
怎么给分呀。。上面一个码。。要写什么呀。。还有什么   要结贴呀。。教教我。。好妈。。。。
发表于:2007-01-22 21:55:3040楼 得分:0
看到页面最上面的 "回复   ¦   收藏此页   ¦   专题   ¦   公告   ¦   管理   ¦   保存   ¦   关闭窗口 "

选择 "管理 "进入后就应该知道了..

输入分数,点 "结贴 ",输入密码就应该可以了...
发表于:2007-01-22 21:56:1041楼 得分:0
……………………
发表于:2007-01-22 21:57:1742楼 得分:0
给分怎么会这样呀。。帮我看看呀        
                                                                贴子回复次数大于跟给分次数
发表于:2007-01-22 22:00:1543楼 得分:0
嘻嘻。。我会给分了呀。。
发表于:2007-01-23 10:09:0444楼 得分:0
ding


快速检索

最新资讯
热门点击