У меня есть ошибка, когда я использую хранимую процедуру MySql и
Уровень доступа к данным (MVC) имеет метод, используемый для чтения данных из базы данных, используя MySqlDataAdapter
и MySqlParameter
и DataTable
для чтенияданные с именем storedata
я тестировал этот метод ранее в контроллере входа в систему, и он также работает: основная ошибка здесь, когда мне нужно сохранить последний accountId с помощью функции MySql last_insert_id()
, но он всегда возвращает нулевое значение, в которое я пытался преобразовать егоint затем добавляет 1 при каждом открытии формы, но это бесполезно, поскольку возвращает ошибку
System.ArgumentException: «accountId параметра» не найден в коллекции. '
вот метод на уровне доступа к данным, который я использую для хранения данных из базы данных
public DataTable storeData(string trChannel,MySqlParameter[] list_OF)
{
InitializeDb();// Database configration method
MySqlCommand Transmeter = new MySqlCommand
{
CommandType = CommandType.StoredProcedure,
CommandText = trChannel,
Connection = dbcon // dbcon its Connection string comming from DAL
};
if (list_OF != null)
{
Transmeter.Parameters.AddRange(list_OF);
}
MySqlDataAdapter massenger = new MySqlDataAdapter(Transmeter);
DataTable _mainContainer = new DataTable();
massenger.Fill(_mainContainer);
disConnect();
return _mainContainer;
}
Хранимая процедура, которую я использовал таким образом, после того, как я попытался использовать last_insert_id () и мне это не удалосья изменяю sp на это и его работу и выдаю мне результат, когда я вызываю его внутри MySQL Server
CREATE DEFINER=`root`@`localhost` PROCEDURE `getAccountId`(out accountId int(5))BEGIN select Max(acotId)from accounts;set @accountId=last_insert_id(acotId); END
В этом случае сервер собирается выдать ошибку
Неизвестный «acotId» в списке полей
, но мне не нужно это исправлять, потому что он дает мне результат, поэтому, когда я вызывал эту процедуру внутри приложения, используя метод, который возвращаетзначение DataTable
дает первую ошибку, которую я написал до System.ArgumentException: 'Parameter 'accountId' not found in the collection.'
, для записи, которую я получил более чем пятью методами, содержит одну и ту же ошибку, большинство из них с входным или выходным параметром и большинство без ..
public DataTable getAcotId()
{
DataTable pdbContainer = new DataTable();
pdbContainer = _socket.storeData("getAccountId",null);//_socket it's a link to data access layer
return pdbContainer;
}
Я попробовал также метод, подобный этому, с параметром, и он также не работает
public DataTable getCusttId()
{
MySqlParameter[] parCut = new MySqlParameter[1];
parCut[0] = new MySqlParameter("?custId", MySqlDbType.Int16, 5) ;
parCut[0].Direction = ParameterDirection.Output;
DataTable pdbContainer = new DataTable();
pdbContainer = _socket.storeData("getCustomerId", parCut);
return pdbContainer;
}
Наконец, я хочу преобразовать результат этих методов в int, и я думаю об использовании этого кода
int customerFinalId = getCustId.Rows.Fields[i].Feilds<int>("custId")
Это все, ребята, и мне очень нужна немедленная помощь для более необходимого
Большое спасибо за помощь ..