0

我对这种方法有疑问。所有参数都在那里,并且按顺序排列,但我仍然收到此错误:ORA-01008: not all variables bound

protected void LastUpdateDates(string Path, string Key, bool Update)
        {
            //load the update dates of the mta files 
            try
            {
                FileInfo file = new FileInfo(Path);
                string query = string.Empty;

                if (myOleDbConnection.State == ConnectionState.Closed) { myOleDbConnection.Open(); }
                OleDbCommand myOleDbCommand = new OleDbCommand();                
                query = "UPDATE USER_LINK_MTA_LOGS SET DT_ATUALIZACAO=:PDT, DS_CAMINHO=:PFULLNAME WHERE ID_ARQUIVO=:PKEY";


                myOleDbCommand.Connection = myOleDbConnection;
                myOleDbCommand.CommandText = query;
                myOleDbCommand.Parameters.AddWithValue(":PDT", file.LastWriteTime);
                myOleDbCommand.Parameters.AddWithValue(":PFULLNAME", file.FullName);
                myOleDbCommand.Parameters.AddWithValue(":PKEY", Key);

                myOleDbCommand.ExecuteNonQuery();

                myOleDbCommand.Dispose();


            }
            catch (Exception exxx)
            {
                ErrorHandler.TreatError("Could not obtain MTA configuration\r\n" + exxx);
            }

        }

现在我尝试了?占位符 Skeet 说:

myOleDbCommand.Parameters.Add(file.LastWriteTime.ToString(),OleDbType.DBTimeStamp);
myOleDbCommand.Parameters.Add(file.FullName,OleDbType.VarChar);
myOleDbCommand.Parameters.Add(Key,OleDbType.VarChar);

当我运行 ExecuteNonQuery 时,上面的方法出现以下错误。

参数 [0] '' não tem valor padrão。翻译:参数 [0] 没有标准值。
参数 [1] '' não tem valor padrão。
参数 [2] '' não tem valor padrão。

在下面也尝试过这种方式,并且在设置参数时出错。

myOleDbCommand.Parameters.Add(file.LastWriteTime);
myOleDbCommand.Parameters.Add(file.FullName);
myOleDbCommand.Parameters.Add(Key);

OleDbParameterCollection 必须注意 OleDbParameter não nulos,não aceita objetos DateTime。
翻译:OleDbParameterCollection 只接受 OleDbParameter 类型的非空对象。不接受 DateTime 类型的对象。

4

1 回答 1

1

根据文档,OleDbCommand.Parameters您不能使用命名参数:

当 CommandType 设置为 Text 时,OLE DB .NET 提供程序不支持将参数传递给 SQL 语句或由 OleDbCommand 调用的存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。

您是否尝试过使用占位符?

于 2010-07-13T17:58:21.453 回答