繁体   English   中英

byte []到字符串未在查询中执行

[英]byte[] to String not executing in query

我有以下代码。 我传递给函数GetInsert的是ID,该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中执行它时,转换后的字符串无法以某种方式识别。 请让我知道我的方法是否正确。 任何建议都会有所帮助

尝试使用安装了StringBuilder的命令参数,并将字节转换为字符串。

请参阅Microsoft SqlCommand.Parameters文档

您的代码应如下所示:

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注入。 只需使用参数化查询即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM