¿Cómo puedo agregar una entrada proporcionada por el usuario a una declaración SQL?

Estoy intentando crear una declaración SQL utilizando datos proporcionados por el usuario. Yo uso un código similar a este en C #:

var sql = "INSERT INTO myTable (myField1, myField2) " +
          "VALUES ('" + someVariable + "', '" + someTextBox.Text + "');";

var cmd = new SqlCommand(sql, myDbConnection);
cmd.ExecuteNonQuery();

y esto en VB.NET

Dim sql = "INSERT INTO myTable (myField1, myField2) " &
          "VALUES ('" & someVariable & "', '" & someTextBox.Text & "');"

Dim cmd As New SqlCommand(sql, myDbConnection)
cmd.ExecuteNonQuery()

Sin embargo

esto falla cuando la entrada del usuario contiene comillas simples (por ejemplo,O'Brien),arece que no puedo obtener el formato correcto al insertar valores de fecha y hora y la gente sigue diciéndome que no debería hacer esto debido a la "inyección SQL".

¿Cómo lo hago "de la manera correcta"?