1

我正在.NET 2.0 中编写一个小型 Windows 窗体应用程序。

我有一个 OdbcDataAdapter 有像这样指定的插入和更新语句。该代码前面也定义了 select 语句。

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) 时,它适用于插入,但会在更新时引发错误。它说:错误 [22018][SYBASE][ODBC Sybase 驱动程序][SQL Server]不允许从数据类型“NUMERIC”到“VARCHAR”的隐式转换。使用 CONVERT 函数运行此查询。

检查变量,没有理由发生这种情况。ReportID 是一个 varchar,但由于某些奇怪的原因,在更新时被视为数字。为什么会这样?

更新

刚刚发现这是由于我设置参数的顺序。我想无论如何我都会发布这个,以防其他人被卡住。

4

0 回答 0