【问题标题】:Dynamic value in where clause [duplicate]where 子句中的动态值 [重复]
【发布时间】:2017-08-26 01:55:12
【问题描述】:

我想根据打开窗体的用户选择一张照片。

如果我在 where 子句中输入一个数字,“where id=36”,它只显示 ID 34 的照片(其静态)。我怎样才能让它充满活力?每个用户都有自己的照片,因此应该加载它。代码如下。

 cmd = new SqlCommand("select profilepic from users where id=@Id", con);
        cmd.Parameters.Add("@ID", SqlDbType.Int);
        cmd.Parameters["@ID"].Value = profilePic;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds);
        if (ds.Tables[0].Rows.Count > 0)
        {
            MemoryStream ms = new MemoryStream((byte[])ds.Tables[0].Rows[0]["profilepic"]);
            pictureBox1.Image = new Bitmap(ms);
        }

【问题讨论】:

  • 查看 sql 参数。

标签: c# sql dynamic photo


【解决方案1】:

您应该使用 Parameter 对象来添加它,而不是动态创建 SQL 语句。它通常更安全,并且在性能方面不会真正受到惩罚

var con = new SqlConnection();
var cmd = new SqlCommand("select profilepic from users where id=@id", con);
cmd.Parameters.AddWithValue("@id", 36);
var pic = cmd.ExecuteScalar();

【讨论】:

  • 错误:System.InvalidCastException:'无法将参数值从 profilePic 转换为 Int32。'
  • 好吧,profilePic是什么类型的??
  • @ArdiHasani 不幸的是,我没有方便的 SQL Server 来尝试代码,但您的错误似乎表明出于某种奇怪的原因 profilePic 是一个参数,而不是 @id。我感觉您的查询有问题(错误的数据类型、在查询中用作表/字段的关键字等)
  • 我认为很明显,无论profilePic 是什么,它都不是int
  • @Crowcoder 和代码中的什么暗示profilePicint
猜你喜欢
  • 2021-10-20
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 2012-03-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多