C# は、すべての null 値を同等の DBNull 値に正しく変換していないようです。
次のようなものを試してください
string sql = "INSERT INTO Products
VALUES(NEWID(), @cName, @cType)";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@cName", cur.name == null ? (object)DBNull.Value : cur.name);
cmd.Parameters.AddWithValue("@cName", cur.type == null ? (object)DBNull.Value : cur.type);
cmd.Execute();
現在のクエリは sql インジェクションの可能性があるため、パラメーター化されたクエリを使用する方が良い解決策です。また、null 値のチェックも可能です。
または、値を空にする必要がある場合は、次のようなものを使用します
cmd.Parameters.AddWithValue("@cName", cur.type == null ? "" : cur.type);