4

I have a object with a byte[] property, and I would like to convert this value to the correct value to can insert it into the database using T-SQL.

But I don't know how I could convert the byte[] to the correct value for T-SQL for the insert.

Thanks.

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Álvaro García
  • 18,114
  • 30
  • 102
  • 193

3 Answers3

8

Create a Console Application project and try this code

// Sample Class
public class MyClass
{
    public byte[] data;
}

// Main 
static void Main(string[] args)
{
    MyClass cls = new MyClass();
    using (SqlConnection cn = new SqlConnection("CONNECTION STRING"))
    {
        cn.Open();
        using (SqlCommand cmd = new SqlCommand("insert into MyTable values (@data)", cn))
        {
            cmd.Parameters.AddWithValue("@data", cls.data);
            cmd.ExecuteNonQuery();
        }
    }
}
FLICKER
  • 6,439
  • 4
  • 45
  • 75
  • 1
    The overload of `Add` you are calling is marked obsolete. You should use `.AddWithValue("@data", cls.data);` or `.Add("@data", SqlDbType.VarBinary).Value = cls.data;` – Scott Chamberlain Apr 12 '17 at 18:52
  • @ScottChamberlain, Thanks for notifying me. I updated my answer – FLICKER Apr 12 '17 at 18:56
7

You want to convert to VarBinary.

See the following:

SQL Server Data Type Mappings

simple example (setting command parameter)

byte[] data;
command.Parameters.Add("@data", SqlDbType.VarBinary).Value = data;

T-SQL example of how to pass in varbinary

CREATE PROCEDURE YourStoredProc
    @data varbinary(max)
AS
BEGIN
  -- your code
END
Scott Chamberlain
  • 124,994
  • 33
  • 282
  • 431
William Xifaras
  • 5,212
  • 2
  • 19
  • 21
5

Generating raw varbinary to insert to database (copy-paste case)

string ToVarbinary(byte[] data)
    {
        var sb = new StringBuilder((data.Length * 2) + 2);
        sb.Append("0x");

        for (int i = 0; i < data.Length; i++)
        {
            sb.Append(data[i].ToString("X2"));
        }

        return sb.ToString();
    }
Kamerton
  • 315
  • 3
  • 9