Я пишу небольшое приложение для Windows-формы в .NET 2.0.
У меня есть OdbcDataAdapter, в котором операторы Insert и Update определены следующим образом.Оператор выбора также определен ранее в этом коде.
OdbcCommand insertCommand = _connection.CreateCommand();
insertCommand.CommandText = "INSERT INTO myTable (ReportID) VALUES (?ReportId)";
_dataAdapter.InsertCommand = insertCommand;
_dataAdapter.InsertCommand.Parameters.Add(new OdbcParameter { ParameterName = "?ReportID", SourceColumn = "ReportID" });
OdbcCommand updateCommand = _connection.CreateCommand();
updateCommand.CommandText = @"
UPDATE
myTable
SET
ReportID = ?ReportID
WHERE ID = ?ID";
_dataAdapter.UpdateCommand = updateCommand;
_dataAdapter.UpdateCommand.Parameters.Add(new OdbcParameter { ParameterName = "?ID", SourceColumn = "ID"});
_dataAdapter.UpdateCommand.Parameters.Add(new OdbcParameter { ParameterName = "?ReportID", SourceColumn = "ReportID"});
В любом случае, вот в чем проблема.Когда я вызываю _dataAdapter.Update (_table), он работает на вставках, но выдает ошибку на Updates.В нем говорится: ОШИБКА [22018] [SYBASE] [Драйвер ODBC Sybase] [SQL Server] Неявное преобразование из типа данных «NUMERIC» в «VARCHAR» не допускается.Используйте функцию CONVERT для выполнения этого запроса.
Изучая переменные, нет причин для этого.ReportID - это varchar, но по какой-то странной причине в обновлениях он рассматривается как цифра.Почему это происходит?
ОБНОВЛЕНИЕ
Просто выяснил, что это из-за порядка, в котором я настраивал параметры.Я решил опубликовать это в любом случае, на случай, если кто-то застрянет.