@Malik Asad Mahmood ,Based on my test, I find some problems about your code.
First, I suggest that you could change the following code:
cmd.CommandText = "INSERT INTO BULKINSERTTEST (ID, NAME, ADDRESS) VALUES (:1, :2, :3)";
Into:
cmd.CommandText = "INSERT INTO Teacher (ID, NAME, ADDRESS) VALUES (@ID, @NAME, @ADDRESS)";
Second, we can not assign the arr to an OracleParameter.
Third, It will be better to run the code in the loop.
Here is a code example you could refer to.
public void SaveUsingOracleBulkCopy(DataTable dt)
{
try
{
string connstr = "";
using (var connection = new OracleConnection(connstr))
{
connection.Open();
for (int j = 0; j < dt.Rows.Count; j++)
{
OracleParameter id = new OracleParameter();
id.SqlDbType = OracleDbType.Int32;
id.Value = Convert.ToInt32(dt.Rows[j]["ID"]);
id.ParameterName="@ID";
OracleParameter name = new OracleParameter();
name.SqlDbType = OracleDbType.Varchar2;
name.Value = Convert.ToString(dt.Rows[j]["NAME"]);
name.ParameterName="@NAME";
OracleParameter address = new OracleParameter();
address.SqlDbType = OracleDbType.Varchar2;
address.Value = Convert.ToString(dt.Rows[j]["ADDRESS"]);
address.ParameterName="@ADDRESS";
OracleCommand cmd = connection.CreateCommand();
cmd.CommandText = "INSERT INTO Teacher (ID, NAME, ADDRESS) VALUES (@ID, @NAME, @ADDRESS)";
cmd.Parameters.Add(id);
cmd.Parameters.Add(name);
cmd.Parameters.Add(address);
cmd.ExecuteNonQuery();
}
this.Close();
}
}
catch (Exception ex)
{
throw ex;
}
}
If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.