Usando um procedimento armazenado, basta criar um parâmetro do tipo varbinary(max) e inseri-lo na tabela como faria com qualquer tipo de dado.
Em seu código c# (ou vb ou qualquer outro), adicione um parâmetro ao seu objeto de comando sql e defina a matriz de bytes como o valor do parâmetro:
command.Parameters.AddWithValue("@parameter_name", myByteArray);
Se não estiver usando um procedimento armazenado, você provavelmente pode fazer o mesmo com uma instrução sql parametrizada, mas eu nunca tentei isso, então não posso dar um exemplo.
Editar:
Você está usando uma consulta parametrizada, que não é minha praia, então não posso garantir que isso funcione. Mas, aqui está um código que deve ajudá-lo.
RemoteSQLcmd = New SqlCommand("INSERT INTO Table(1) Values (newid(), ProductID, @bin_value", RemoteSQLConn)
RemoteSQLcmd.Parameters.AddWithValue(@bin_value", imSource) ;
O valor binário deve ser representado como um parâmetro (@bin_value) e o valor é definido pela instrução AddWithValue. O nome do parâmetro não precisa corresponder ao nome da coluna.
Algumas notas:sugiro usar nomes de colunas em sua instrução de inserção em vez de depender da posição da coluna. Além disso, não sei o que você quer dizer com 'tabela (1)' - esse é realmente o nome da tabela?