当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();
}
/////////////////////////////////////////////// /////////////////////// // * ** * ** * ** * ** * < / EM> ** * ** * ** * ** * ** * < / EM> * //好的,谢谢你们所有的回复。这就是我如何使用stackckoverflow中的其他帖子来解决其他问题。请注意,fDescription和USerID正在传递给函数。
command.CommandText =“INSERT INTO IMS_Workflow(ID,NAME,F_SCRIPT)VALUES('”+ UserID +“','”+ WfDescription +“',EMPTY_CLOB())”;
答案 0 :(得分:3)
我可能遗漏了一些内容,但我没有看到您将参数@UserID或@fDescription添加到命令对象的参数集合中的位置。加上那些,我怀疑你应该没事。
答案 1 :(得分: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;
(@
的前缀可能也会起作用;我只是通过文档中的示例。)
您的解决方法是将值直接嵌入到SQL中。 不要这样做。您正在邀请SQL injection attacks。