c# - c#中的参数无效异常

标签 c# sql ado.net

我编写了以下代码以将图片从数据库传递到 C# 中的图片框。我从微软那里得到了这段代码。这是该页面的网址。 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);
    }
}

我收到以下错误消息。

An unhandled exception of type 'System.ArgumentException' occurred in System.Drawing.dll

Additional information: Parameter is not valid.

这是我的数据库快照。 LOgin Table

最佳答案

您有 3 个问题(性能和安全问题):

  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();
               }
           }
      }
}

关于c# - c#中的参数无效异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39423911/

相关文章:

c# - View 中的 Rowspan (mvc4)

sql - 如何使用TeamCity执行SQL脚本?

c# - 找出图像列是否为空的最佳方法是什么?

c# - 具有超过 2000 个参数的 ADO.NET 批量插入

.net - .NET Framework 中是否支持将 .NET 数据类型映射到其对应的 SqlDBType?

c# - 如何定位 Outlook 2007/2010 VSTO 上下文菜单按钮?

c# - 使用 C# 读取附加到 HTTP 扩展的 BLOB

sql - 根据另一列的字母顺序更新序数列

java - 无法在 sql 上添加或更新子行

c# - 如何将图片调整为特定的文件大小?