Use the debugger: First break out the line
cmd.Parameters.Add("@Item_Code", SqlDbType.NVarChar).Value = dataGridView2.Rows[i].Cells[4].Value;
To
object obj = dataGridView2.Rows[i].Cells[4].Value;
cmd.Parameters.Add("@Item_Code", SqlDbType.NVarChar).Value = obj;
Then put a breakpoint on the the second line of those two, and examine the contents of "obj"
Probably, it is null - which is confusing SQL unless you said the parameter could be null in your stored procedure.