0

当 ExcuteNonQuery 执行时,我得到一个 ORAC 0936。我想我的问题是我的 SQL 的 VALUES 部分。在此先感谢您的帮助

public int NewFunction(int UserID, string fName, string fDescription, string connectionStr)
        {
            OracleConnection connection = new OracleConnection(connectionStr);
            try
            {
                //PLease Note that User ID and  fDescription are passed into the function as  
//parameters
                connection.Open();

                OracleCommand command = connection.CreateCommand();

                OracleTransaction transaction = connection.BeginTransaction();
                command.Transaction = transaction;
                        string LoadedFileName = @WfName;//Fd.FileName;
               //read the xaml content from file 
                command.CommandText = "INSERT INTO XYZ(ID, NAME , F_SCRIPT) VALUES (@UserID, @fDescription, EMPTY_CLOB())";

                command.ExecuteNonQuery();
                transaction.Commit();
               }

///////////////////////////////////////// ///////////////// // * ** * ** * ** * ** * ** * ** * ** * ** * ** * * //好的,谢谢大家的回复。这就是我使用stackckoverflow的其他帖子解决其他问题的方式。请注意 fDescription 和 USerID 被传递给函数。

command.CommandText = "INSERT INTO IMS_Workflow (ID, NAME , F_SCRIPT) VALUES ('" + UserID + "', '" + WfDescription + "', EMPTY_CLOB())";

4

2 回答 2

3

我可能遗漏了一些东西,但我看不到您将参数 @UserID 或 @fDescription 添加到命令对象的参数集合的位置。添加这些,我怀疑你应该没问题。

于 2012-09-17T15:12:57.107 回答
2

您的原始代码看起来像是在尝试使用参数化 SQL:

command.CommandText = "INSERT INTO XYZ(ID, NAME , F_SCRIPT) VALUES (@UserID, @fDescription, EMPTY_CLOB())";

...但您从未设置参数的,并且它使用 SQL Server 样式名称(@前缀而不是:)。您需要正确声明参数,并给它们赋值,例如

command.CommandText = "INSERT INTO XYZ(ID, NAME , F_SCRIPT) VALUES (:UserID, :fDescription, EMPTY_CLOB())";
command.Parameters.Add("UserId", OracleType.Number).Value = userId;
command.Parameters.Add("fDescription", OracleType.NVarChar).Value = fDescription;

(前缀 of 也可能@会起作用;我只是通过文档中的示例进行说明。)

您的解决方法是将值直接嵌入到您的 SQL 中。不要这样做。您正在邀请SQL 注入攻击

于 2012-09-17T16:29:41.367 回答