Program.cs中“参数无效”的错误是什么意思?

时间:2014-10-03 09:10:05

标签: c# image parameters

我还是c#的新人请帮助我。我试图在数据库中保存图像,因为我按照我的研究中的建议做了这个:

byte[] img = ImageToByte(pbxBarcode.Image);
byte[] img2 = ImageToByte(pbxLogo.Image);

cmd.CommandText = "Update table set Image=(?),logo=(?) where ID=" + id + "";
cmd.Parameters.Add("@barcode", OdbcType.Image).Value = img;
cmd.Parameters.Add("@logo", OdbcType.Image).Value = img2;

cmd.ExecuteNonQuery();

输入的第一个数据将按预期保存,但程序会冻结(?)。有了它,我的意思是没有EventHandler会触发,但是对象仍然有效,文本框仍然接受输入等等。然后,如果我浏览表单然后返回,则错误出现在Program.cs中,说“参数无效”。我提供了截图。

enter image description here

还要注意,如果我只提供了一个odbcParameter ..所有如果工作正常..我也尝试使用两个Update语句..甚至为每个创建了两个函数,updatebarcode(id),updatelogo(id)但仍然没有运气。我希望你能帮助我。 TNX

2 个答案:

答案 0 :(得分:0)

如果使用sql server,则可以使用SqlCommand。 Here是一个带有示例的文档。从文档: SQL Server的Microsoft .NET Framework数据提供程序不支持问号(?)占位符,用于将参数传递给SQL语句或由CommandType.Text命令调用的存储过程 < / p>

那么您可能想要使用的是:

cmd.CommandText = "Update table set Image=(@barcode),logo=(@logo) where ID=@imageID";
cmd.Parameters.Add("@barcode", SqlDbType.Image).Value = img;
cmd.Parameters.Add("@logo", SqlDbType.Image).Value = img2;
cmd.Parameters.Add("@imageID", SqlDbType.Int).Value = id;

还有其他人提到你在Program.cs中遇到异常,因为你没有在其他地方处理异常。

如果您这样做:

try
{
    cmd.ExecuteNonQuery();
}
catch(Exception exc) //<==
{

}

Visual Studio将在箭头显示的位置中断。此时您可以分析exc,您将看到错误消息和堆栈跟踪(Jon Skeet正在谈论的事情)

答案 1 :(得分:0)

我知道了......我认为在按钮点击事件中发现了错误。不确定原因:

            pbxLogo.Image.Dispose(); //here.. 
            pbxLogo.Image = pbxSelectLogo.Image;

但我删除了该行,它只是起作用了......呵呵

这是例外:

System.ArgumentException: Parameter is not valid.
   at System.Drawing.Image.get_FrameDimensionsList()
   at System.Drawing.ImageAnimator.CanAnimate(Image image)
   at System.Drawing.ImageAnimator.ImageInfo..ctor(Image image)
   at System.Drawing.ImageAnimator.Animate(Image image, EventHandler onFrameChangedHandler)
   at System.Windows.Forms.PictureBox.Animate(Boolean animate)
   at System.Windows.Forms.PictureBox.Animate()
   at System.Windows.Forms.PictureBox.InstallNewImage(Image value, ImageInstallationType installationType)
   at System.Windows.Forms.PictureBox.set_Image(Image value)
   at xxxxx.BarcodeGenerator.btnStOk_Click(Object sender, EventArgs e) in C:\xxxxx\xxxxx\BarcodeGenerator.cs:line 459
这是什么意思?