Работа с Sybase и DataAdapter - PullRequest
1 голос
/ 24 марта 2011

Я пишу небольшое приложение для 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, но по какой-то странной причине в обновлениях он рассматривается как цифра.Почему это происходит?

ОБНОВЛЕНИЕ

Просто выяснил, что это из-за порядка, в котором я настраивал параметры.Я решил опубликовать это в любом случае, на случай, если кто-то застрянет.

...