Это потому, что вы присвоили весь строковый массив параметру базы данных:
string[] MA_TB = new string[dt.Rows.Count];
…
mA_TB.Value = MA_TB;
…
cmd.Parameters.Add(mA_TB);
Вместо одного из строковых значений в массиве.Это означает, что вы вставите System.String[]
как "строку", а не "Hello World"
или что-то еще.Это происходит потому, что когда вы звоните Convert.ToString(someobject)
, все, что произойдет, вызывается someobject.ToString()
.В отсутствие какого-либо переопределяющего метода (и строковый массив не имеет переопределения) вызывается значение по умолчанию ToString()
, и все, что он делает, возвращает имя типа объекта - в этом случае строковый массив
Выберите один из элементов массива в качестве значения параметра:
mA_TB.Value = MA_TB[0];
Или, если вы хотите, чтобы все они, например, были разделены запятыми, объедините их в одну строку:
mA_TB.Value = String.Join(",", MA_TB);
Редактировать:
Вставить все строки из dt в базу данных, давайте использовать эти вещи, как они должны использоваться (команда настройки и параметры, многократно изменять значения параметров и выполнять) ..
DataTable dt = ds.Tables[0];
OracleConnection oraclecon = (OracleConnection)db.Database.Connection;
// create command and set properties
OracleCommand cmd = oraclecon.CreateCommand() as OracleCommand;
cmd.CommandText = "INSERT INTO CSKH_IMPTEST_07052019 (ma_tb,ghichu) VALUES (:2, :3)";
OracleParameter mA_TB = new OracleParameter();
mA_TB.OracleDbType = OracleDbType.Varchar2;
cmd.Parameters.Add(mA_TB);
OracleParameter gHICHU = new OracleParameter();
gHICHU.OracleDbType = OracleDbType.Varchar2;
cmd.Parameters.Add(gHICHU);
oraclecon.Open();
foreach(DataRow ro in dt.Rows)
{
mA_TB.Value = ro["MA_TB"].ToString();
gHICHU.Value = ro["GHICHU"].ToString();
cmd.ExecuteNonQuery();
}
oraclecon.Close();