我正面临这个错误,告诉我我正在使用非法变量或数字,并在我的代码Line 34:rowsAffected = command.ExecuteNonQuery();
中高亮显示这一行。我认为我在需要根据Oracle格式更改的参数中存在问题,但不确定。我确实将所有@
替换为p.Course_id
,然后替换?p.course
,p_course_id
,就像我在oracle中的存储过程中所做的那样,但它们都不起作用。我仍然得到同样的错误。
请帮我解决这个问题。谢谢
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Configuration;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OracleClient;
public class PostForum
{
public static int INSERTforum(int course_Id, string question, string posterName, DateTime blog_date)
{
int rowsAffected = 0;
using (OracleConnection connection = ConnectionManager.GetDatabaseConnection())
{
OracleCommand command = new OracleCommand("INSERTforum", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@course_Id", SqlDbType.Int).Value = course_Id;
command.Parameters.Add("@question", SqlDbType.VarChar).Value = question;
command.Parameters.Add("@posterName", SqlDbType.VarChar).Value = posterName;
command.Parameters.Add("@blogdate", SqlDbType.DateTime).Value = blog_date;
rowsAffected = command.ExecuteNonQuery();
}
return rowsAffected;
}
}
这是我的存储过程
CREATE OR REPLACE PROCEDURE INSERTforum(
p_course_id IN forum.COURSE_ID%TYPE,
p_question IN forum.QUESTION%TYPE,
p_postername IN forum.POSTERNAME%TYPE,
p_blogdate IN forum.BLOG_DATE%TYPE)
AS
BEGIN
INSERT INTO forum ("COURSE_ID", "QUESTION", "POSTERNAME", "BLOG_DATE")
VALUES (p_course_id, p_question,p_postername, p_blogdate);
COMMIT;
END;
/
答案 0 :(得分:1)
我认为在Add方法调用
中使用无效枚举会引发您的问题如果您运行此代码,您可能会注意到Int32的OracleType与SqlDbType不同
OracleType e = OracleType.Int32;
int i = (int)e;
Console.WriteLine(i.ToString()); // Output = 28
SqlDbType z = SqlDbType.Int;
i = (int)z;
Console.WriteLine(i.ToString()); // Output = 8
因此,我建议为您的ADO.NET提供程序使用正确的枚举。
值得注意的是,接受使用SqlDbType
而不是OracleType
调用Add并且不会引发编译器时间错误。发生这种情况是因为Add方法有一个重载接受一个对象作为第二个参数(它用于在构造参数时直接传递一个值)。
另一种方法是使用AddWithValue
OracleParameterCollection
command.Parameters.AddWithValue("@course_Id", course_Id);
command.Parameters.AddWithValue("@question", question);
command.Parameters.AddWithValue("@posterName", posterName);
command.Parameters.AddWithValue("@blogdate", blog_date);