Привет, ребята, здесь я получил cities
таблица имеет 4 столбца cityId
- это "AUTO_INCREMENT", cityName
, governate
, conId
- ссылки на внешние ключи для countries
таблицы
и они являются хранимой процедурой для вставки данных в эту таблицу, используя last_insert_id()
CREATE DEFINER=`root`@`localhost` PROCEDURE `addCity`(in cityNamee varchar(45),bGovernate varchar(45),cconId int(5),out ccityId int(5))BEGIN insert into cities(`cityName`,`governate`,`conId`)values (@cityNamee,@bGovernate,@cconId);set @ccityId=last_insert_id();END
, когда sp вызывался из бизнес-уровня (контроллера) и передавал throw в модель, затем выполнял процедуру, вот модель для передачикоманда вставки, обновления, удаления
public void Transfare(string _chanPoro, MySqlParameter[] _dataContainer)
{
MySqlCommand transmeter = new MySqlCommand
{
CommandType = CommandType.StoredProcedure,
CommandText = _chanPoro,
Connection = dbcon
};
transmeter.Parameters.AddRange(_dataContainer);
connect();
transmeter.ExecuteNonQuery();
disConnect();
}
Я пытался вставить данные, используя MySqlParameter
, но это всегда не удавалось и выдает ошибку
public static void insertCity(string cityName, string governate, int countryId)
{
try
{
_socket = new _ctrlChannel();
MySqlParameter[] zair = new MySqlParameter[4];
zair[0] = new MySqlParameter("@cityNamee", MySqlDbType.VarChar, 45)
{ Value = cityName, Direction = ParameterDirection.Input
};
zair[1] = new MySqlParameter("@bGovernate", MySqlDbType.VarChar)
{ Value = governate, Direction = ParameterDirection.Input
};
zair[2] = new MySqlParameter("@cconId", MySqlDbType.VarChar)
{ Value = countryId, Direction = ParameterDirection.Input
};
zair[3] = new MySqlParameter("@ccityId", MySqlDbType.Int32,5)
{ Direction = ParameterDirection.Output
};
_socket.connect();
_socket.Transfare("addCity", zair);
_socket.disConnect();
}
catch (MySql.Data.MySqlClient.MySqlException we) { MessageBox.Show("error" + we); }
}
cityName
не был найден в коллекции
, и я пытаюсь использовать традиционные способы вставки данных с помощью этого метода, и основная проблема здесь заключается в вставке нулевого значения в базу данных (не работает), и это не поддерживается вдизайн таблицы
public static void insertNewCity(string cityName, string governate, int countryId)
{
try
{
_socket = new _ctrlChannel();
_ctrlChannel.InitializeDb();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = _ctrlChannel.dbcon;
cmd.CommandText = "addCity";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@cityNamee", cityName);
cmd.Parameters["@cityNamee"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("@bGovernate", governate);
cmd.Parameters["@bGovernate"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("@cconId", countryId);
cmd.Parameters["@cconId"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("@ccityId", MySqlDbType.Int32);
cmd.Parameters["@ccityId"].Direction = ParameterDirection.Output;
_socket.connect();
cmd.ExecuteNonQuery();
_socket.disConnect();
}
catch (MySql.Data.MySqlClient.MySqlException we) { MessageBox.Show("error" + we); }
}
Примечание. Процедура полностью работает, когда я тестировал ее на сервере
Это все, большое спасибо ...