当前位置:编程学习 > C#/ASP.NET >>

ORA-01036: 非法的变量名/编号 问题,请教,thanks


 // <summary>
        /// 打开连接
        /// </summary>
        public static void Open()
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
        }

        /// <summary>
        /// 关闭连接
        /// </summary>
        public static void Close()
        {
            if (conn.State != ConnectionState.Closed)
            {
                conn.Close();
            }
        }

public static void HT_AddArticle(string title, string color, string lanmu1id, string lanmu3id, string keywords, string description, string url, string source, string thumbnail, string username,string content)
        {
            Open();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "insert into information1(TITLE, COLOR, LANMU1ID, LANMU3ID, KEYWORDS, DESCRIPTION, URL, SOURCE, THUMBNAIL, USERNAME1,THEDATE,CONTENT) " +
            "values('" + title + "','" + color + "','" + Convert.ToInt16(lanmu1id) + "','" + Convert.ToInt16(lanmu3id) + "','" + keywords + "','" + description + "','" + url + "','" + source + "','" + thumbnail + "','" + username + "','" + DateTime.Now.ToString("yyyy-MM-dd") + "',:wj)";
            cmd.Parameters.Add("wj", OracleType.Clob);    //指定类型
            cmd.Parameters["wj"].Value = content;
            cmd.Connection = conn;
            cmd.ExecuteNonQuery();
            Close();
        }
 这个是插入的方法,总是报错ORA-01036: 非法的变量名/编号。

堆栈跟踪: 


[OracleException (0x80131938): ORA-01036: 非法的变量名/编号
]
   System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc) +304825
   System.Data.OracleClient.OracleParameterBinding.Bind(OciStatementHandle statementHandle, NativeBuffer parameterBuffer, OracleConnection connection, Boolean& mustRelease, SafeHandle& handleToBind) +905
   System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals) +912
   System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciRowidDescriptor& rowidDescriptor) +431
   System.Data.OracleClient.OracleCommand.ExecuteNonQuery() +115
   DAL.data.HT_AddArticle(String title, String color, String lanmu1id, String lanmu3id, String keywords, String description, String url, String source, String thumbnail, String username, String content) in D:\Projects\ASPNET\ASPNET\ling\DAL\data.cs:2229
   admin_add_article.button_Click(Object sender, EventArgs e) in d:\Projects\ASPNET\ASPNET\ling\WebUI\czzazd_HT\add_article.aspx.cs:96
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565

 
另外每次插入报 ORA-01036: 非法的变量名/编号 错后,重新登录 ,也会报这个错。登录方法如下

登录方法:
public static DataSet HT_CheckAdminDL(string adminname, string pw)
        {

            Close();
            Open();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = @"select * from admin where  ADMIN=:name and PASSWORD=:mima";
            cmd.Connection = conn;
            cmd.Parameters.Add("name", OracleType.VarChar, 20);    //指定类型
            cmd.Parameters["name"].Value = adminname;
            cmd.Parameters.Add("mima", OracleType.VarChar, 20);    //指定类型
            cmd.Parameters["mima"].Value = pw;
            da.SelectCommand = cmd;
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
            Close();
       } --------------------编程问答-------------------- 这。。。你都用 parameter 了,还拼什么字符串?

都用 Parameter 方式吧。

自己debug下,把运行时的sql,放到查询器里调试一下。 --------------------编程问答-------------------- 下边的代码就会造成 ORA-01036 非法的变量名/编号
C#代码  
cmd.CommandText = "SELECT * FROM kk.kkyh WHERE id = @comboBox1 and password = @textBox1 ";  
  
cmd.Parameters.Add("@comboBox1", OracleType.VarChar).Value = comboBox1.Text;  
cmd.Parameters.Add("@textBox1", OracleType.VarChar).Value = textBox1.Text;  
 
把SQL中的@改成:,把.Add中的@去掉,就正常了
 
C#代码  
cmd.CommandText = "SELECT * FROM kk.kkyh WHERE id = :comboBox1 and password = :textBox1 ";  
  
cmd.Parameters.Add("comboBox1", OracleType.VarChar).Value = comboBox1.Text;  
cmd.Parameters.Add("textBox1", OracleType.VarChar).Value = textBox1.Text;  --------------------编程问答-------------------- 都Parameter  也不对。。。 我用的是ORACLE 10G..

  Open();
            cmd.CommandType = CommandType.Text;
cmd.CommandText = "insert into information1(TITLE, COLOR, LANMU1ID, LANMU3ID, KEYWORDS, DESCRIPTION, URL, SOURCE, THUMBNAIL,USERNAME,THEDATE,CONTENT) " +
             "values(:info_title,:info_color,:info_lanmu1id,:info_lanmu3id,:info_keywords,:info_description,:info_url,:info_source,:info_thumbnail,:info_username,:info_time,:wj)";


            cmd.Parameters.Add("info_title", OracleType.NVarChar);    //指定类型
            cmd.Parameters["info_title"].Value = title;

            cmd.Parameters.Add("info_color", OracleType.NVarChar);    //指定类型
            cmd.Parameters["info_color"].Value = color;

            cmd.Parameters.Add("info_lanmu1id", OracleType.Int16);    //指定类型
            cmd.Parameters["info_lanmu1id"].Value = Convert.ToInt16(lanmu1id);


            cmd.Parameters.Add("info_lanmu3id", OracleType.Int16);    //指定类型
            cmd.Parameters["info_lanmu3id"].Value = Convert.ToInt16(lanmu3id); ;

            cmd.Parameters.Add("info_keywords", OracleType.NVarChar);    //指定类型
            cmd.Parameters["info_keywords"].Value = keywords;


            cmd.Parameters.Add("info_description", OracleType.NVarChar);    //指定类型
            cmd.Parameters["info_description"].Value = description;

            cmd.Parameters.Add("info_url", OracleType.NVarChar);    //指定类型
            cmd.Parameters["info_url"].Value = url;

            cmd.Parameters.Add("info_source", OracleType.NVarChar);    //指定类型
            cmd.Parameters["info_source"].Value = source;

            cmd.Parameters.Add("info_thumbnail", OracleType.NVarChar);    //指定类型
            cmd.Parameters["info_thumbnail"].Value = thumbnail;

            cmd.Parameters.Add("info_username", OracleType.NVarChar);    //指定类型
            cmd.Parameters["info_username"].Value = username;


            cmd.Parameters.Add("info_time", OracleType.NVarChar);    //指定类型
            cmd.Parameters["info_time"].Value = DateTime.Now.ToString("yyyy-MM-dd");

            cmd.Parameters.Add("wj", OracleType.Clob);    //指定类型
            cmd.Parameters["wj"].Value = content;

            cmd.Connection = conn;
            cmd.ExecuteNonQuery();

 对了 我数据库的 有的类型VarChar2,OracleType 找不到 我都换成 NVarChar
引用 1 楼  的回复:
这。。。你都用 parameter 了,还拼什么字符串?

都用 Parameter 方式吧。

自己debug下,把运行时的sql,放到查询器里调试一下。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,