byte[] to String在查询中不执行

本文关键字:查询 执行 String to byte | 更新日期: 2023-09-27 18:11:40

我有以下代码。我传递给函数GetInsert的是ID,然后创建INSERT语句。注意_Image1的类型是byte[]。在数据库表中,Image1的类型是IMAGE。请注意,我在下面所做的输出字符串的方式,我有点卡住了,因为它是一大块代码的一部分。

    public string GetInsert(string ID)
    {
      System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
      stringBuilder .Append("INSERT INTO tblMain(ID,Image1) VALUES (");
      stringBuilder .Append((ID) + ", ");
      stringBuilder .Append(ByteToString(_Image1) + ")");
      return stringBuilder.ToString();
    }

因为上面的代码需要转换为字符串,所以我将_Image1转换为字符串,如下所示。请让我知道这是正确的方法。

    public string ByteToString(byte[] bytes)
    {
        if(bytes == null)
        {
            return "NULL";
        }
      else
      {
          return "'" + System.Text.Encoding.UTF8.GetString(bytes) + "'";
      }
   }

然后在代码的其他地方,我执行以下操作来执行插入语句:

    command.CommandText = obj1.GetInsert(sID);
    command.ExecuteNonQuery();

我遇到的问题是,当我如上所示这样做时,转换的字符串不是在代码试图在ExecuteNonQuery中执行它时被识别的方式。请让我知道我的方法是否正确。任何建议都会有帮助的

byte[] to String在查询中不执行

尝试使用命令参数而不是使用StringBuilder并将字节转换为字符串。

参见microsoft SqlCommand。参数文档

你的代码应该是这样的:
command.CommandText = "INSERT INTO tblMain(ID,Image1) VALUES (@Id,@Image)";
command.Parameters.AddWithValue("@Id", sID);
command.Parameters.AddWithValue("@Image", _Image1);
command.ExecuteNonQuery();

要使其工作,您需要这样修复:

public string ByteToString(byte[] bytes)
{
    if(bytes == null)
    {
        return "NULL";
    }
  else
  {
      return "0x" + BitConverter.ToString(bytes).Replace("-", "");
  }

}

但是这样做你会要求很多麻烦,比如sql注入。请使用参数化查询。