C#中的参数无效异常

5
我写了以下代码,用于在C#中从数据库传递图片到图片框。我从微软公司获取了这段代码。这是该页面的URL链接:Microsoft
当我运行此代码时,它显示参数无效异常。
这段代码有什么问题?
private void button2_Click(object sender, EventArgs e)
{
    try
    {
        String strCn =@"Data Source=DESKTOP-ROF2H0M\BHAGI;Initial Catalog=Golden;Integrated Security=True";

        SqlConnection cn = new SqlConnection(strCn);
        cn.Open();


        //Retrieve BLOB from database into DataSet.
        SqlCommand cmd = new SqlCommand("SELECT User_id ,img FROM login", cn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds, "login");
        int c = ds.Tables["login"].Rows.Count;


        if (c > 0)
        {   //BLOB is read into Byte array, then used to construct MemoryStream,
            //then passed to PictureBox.
            Byte[] byteBLOBData = new Byte[0];
            byteBLOBData = (Byte[])(ds.Tables["login"].Rows[c-1]["img"]);
            MemoryStream stmBLOBData = new MemoryStream(byteBLOBData);
            pictureBox1.Image = Image.FromStream(stmBLOBData);
        }
        cn.Close();

    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

我收到了以下错误信息:
未处理的异常类型 'System.ArgumentException' 发生在 System.Drawing.dll 中
附加信息: 参数无效。
这是我的数据库快照。 登录表

你能分享更多关于“显示参数无效异常”的信息吗? - Thomas Ayoub
@ThomasAyoub 这是我收到的错误信息 => 在 System.Drawing.dll 中发生了未经处理的类型为“System.ArgumentException”的异常。额外信息:参数无效。 - Pegasus008
通常在PictureBox提供的图像无效时会显示此错误消息。首先将您的字节数组保存到文件中(作为调试步骤)以确认图像是否有效;它可能是无效的。 - Martin
二进制 blob 数据的格式是什么?它是如何生成的? - Dai
你看到我的上一个回答编辑了吗?你的应用程序需要在数据库和代码方面进行一些更改。 - Imran Sh
显示剩余2条评论
1个回答

2

你有三个问题(性能和安全问题):

  1. 需要处理SQL连接
  2. 需要将文件(二进制和图像)存储在磁盘上(无数据库)
  3. 不要尝试未经加密存储用户密码(如MD5)

private void button2_Click(object sender, EventArgs e)
{           
    string strCn = @"Data Source=DESKTOP-ROF2H0M\BHAGI;Initial Catalog=Golden;Integrated Security=True";
        using (var cn = new SqlConnection(strCn))
        {
            try
            {
                cn.Open();
                using (var cmd = new SqlCommand("SELECT User_id ,imgUrlOnDisk FROM login", cn))
                {
                    using (var dr = cmd.ExecuteReader())
                    {
                        if (dr.HasRows)
                        {
                            if (dr.Read())
                            {
                                pictureBox1.Image = Image.FromFile(Convert.ToString(dr["imgUrlOnDisk"]));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (cn.State != ConnectionState.Closed)
                {
                    cn.Close();
                }
            }
        }
}

我建议您使用ADO.net查询的最佳方法如下:

try
{
     using (SqlCommand cmd = new SqlCommand(Query, Connection))
     {
          try
          {
               cmd.CommandType = CommandType;
               foreach (var p in InParameters)
               {
                    cmd.Parameters.Add(p);
               }
               cmd.Connection.Open();
               affectedRows = cmd.ExecuteNonQuery();
               if (affectedRows == 0)
               {
                    //Zero Record Success
               }
               else
               {
                   if (affectedRows > 1)
                   {
                        //Many Record Success
                   }
                   else
                   {
                        //One Record Success
                   }
               }
           }
           catch (Exception InnerEx)
           {
                //Handle your error
           }
           finally
           {
               if (cmd.Connection.State != ConnectionState.Closed)
               {
                   cmd.Connection.Close();
               }
           }
      }
}

你能告诉我你的表格数据吗?这样我就可以为你进行测试。 - Imran Sh
我需要一个 img 列的示例。另外,你还犯了另一个错误,永远不要试图将文件和图片存储在数据库中。 - Imran Sh
我在这里帮助你,如果你有任何问题或困难,请告诉我。 - Imran Sh
正如我在问题中提到的,我从Microsoft网站上找到了这段代码。我对编程完全是新手,所以我直接使用了这段代码。@ImranShams - Pegasus008
谢谢@Pegasus,如果你需要帮助,只要提到我,我会尽快帮助你。 - Imran Sh
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接