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
补充:.NET技术 , ASP.NET