我正在.NET 2.0中编写一个小型Windows窗体应用程序。
我有一个OdbcDataAdapter,它具有如此指定的Insert和Update语句。 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)时,它适用于插入,但会在Updates上引发错误。它说:ERROR [22018] [SYBASE] [ODBC Sybase驱动程序] [SQL Server]不允许从数据类型“NUMERIC”到“VARCHAR”的隐式转换。使用CONVERT函数运行此查询。
检查变量,没有理由发生这种情况。 ReportID是一个varchar,但由于某些奇怪的原因,在更新时被视为数字。为什么会这样?
更新
刚才发现这是由于我正在设置参数的顺序。我以为我会发布这个,以防其他人被卡住。