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

时间:2015-09-08 17:53:35

标签: c# asp.net

我有以下代码。我传递给函数GetInsert的是然后创建INSERT语句的ID。请注意,_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) + "'";

      }

   }

然后代码中的其他地方我执行以下操作来执行insert语句:

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

我遇到的问题是,当我按上面所示执行此操作时,转换的字符串的方式不会在代码尝试在ExecuteNonQuery中执行时识别。如果我的方法是正确的,请告诉我。任何建议都会有所帮助

2 个答案:

答案 0 :(得分:3)

尝试使用inswn使用StringBuilder并转换byte do string。

请参阅microsoft SqlCommand.Parameters docs

您的代码应该是这样的:

command.CommandText = "INSERT INTO tblMain(ID,Image1) VALUES (@Id,@Image)";
command.Parameters.AddWithValue("@Id", sID);
command.Parameters.AddWithValue("@Image", _Image1);
command.ExecuteNonQuery();

答案 1 :(得分:1)

要使其正常工作,您需要像这样解决:

public string ByteToString(byte[] bytes)
{

    if(bytes == null)
    {

        return "NULL";

    }
  else
  {
      return "0x" + BitConverter.ToString(bytes).Replace("-", "");
  }

}

但是这样做你要求许多麻烦,比如sql注射。只需使用参数化查询。