Probably, it has to do with the content on your str array.
It's very dangerous to do it that way: Do not concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Use Parametrized queries instead.
The changes are that will cure your problem at the same time:
OleDbCommand cmd = new OleDbCommand("Update Table1 set "+column_name+"=@CL where ID="+i+"", cn);
cmd.Parameters.AddWithValue("@CL", str[i][j]);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
Technically, the ID should be a parameter as well, but since it's an int it's not a problem.But the text string for the column content could be
anything.