C# ORA-01006执行insert时
以下C# ORA-01006执行insert时,c#,insert,oracle11g,sql-parametrized-query,C#,Insert,Oracle11g,Sql Parametrized Query,以下ExecuteNonQuery返回sql错误:ORA-01006:bind变量不存在。我检查并在查询中定义了所有绑定参数,那么问题出在哪里 public bool AddArticle(ArticleModel articleModel) { bool result = false; using (OracleConnection conn = new OracleConnection(BasicConnection.conne
ExecuteNonQuery
返回sql错误:ORA-01006:bind变量不存在
。我检查并在查询中定义了所有绑定参数,那么问题出在哪里
public bool AddArticle(ArticleModel articleModel)
{
bool result = false;
using (OracleConnection conn = new OracleConnection(BasicConnection.connectionStringOracle))
using (OracleCommand command = conn.CreateCommand())
{
conn.Open();
using (var trans = conn.BeginTransaction())
{
bool inserted = false;
string articleGuid = System.Guid.NewGuid().ToString().Replace("-", "");
command.CommandText = "INSERT INTO ARTICLE (ARTICLE.ID,USER_ID)" +
"VALUES(:aid,:auserId)";
command.Parameters.Add("aid", OracleDbType.Varchar2).Value = articleGuid;
command.Parameters.Add("auserId", OracleDbType.Varchar2).Value = articleModel.UserId;
inserted = (command.ExecuteNonQuery() == 1);
if (!inserted)
{
trans.Rollback();
return false;
}
command.CommandText = "INSERT INTO ARTICLE_CONTENT (LANG_ID,ARTICLE_ID,A_TITLE,A_CONTENT,ARTICLE_STATES_ID) "+
"VALUES(:alangId, :aarticleId, :aatitle, :aacontent, :astateId)";
command.Parameters.Add("alangId", OracleDbType.Varchar2).Value = articleModel.Content.LangId;
command.Parameters.Add("aarticleId", OracleDbType.Varchar2).Value = articleGuid;
command.Parameters.Add("aatitle", OracleDbType.Varchar2).Value = articleModel.Content.ATitle;
command.Parameters.Add("aacontent", OracleDbType.Varchar2).Value = articleModel.Content.AContent;
command.Parameters.Add("astateId", OracleDbType.Varchar2).Value = articleModel.Content.ArticleStatesId;
inserted = (command.ExecuteNonQuery() == 1);
if (!inserted)
{
trans.Rollback();
return false;
}
trans.Commit();
result = true;
}
}
return result;
}
受影响的表格:
CREATE TABLE Article
(
id VARCHAR2 (32) DEFAULT sys_guid() NOT NULL ,
User_id VARCHAR2 (32) NOT NULL ,
created_at DATE DEFAULT sysdate ,
updated_at DATE DEFAULT sysdate
) ;
ALTER TABLE Article ADD CONSTRAINT Article_PK PRIMARY KEY ( id ) ;
CREATE TABLE Article_Content
(
id VARCHAR2 (32) DEFAULT sys_guid() NOT NULL ,
Lang_id VARCHAR2 (32) NOT NULL ,
Article_id VARCHAR2 (32) NOT NULL ,
a_title VARCHAR2 (25) DEFAULT 'No-Title' NOT NULL ,
a_content CLOB ,
Article_States_id VARCHAR2 (32) NOT NULL
) ;
ALTER TABLE Article_Content ADD CONSTRAINT Article_Content_PK PRIMARY KEY ( id ) ;
ALTER TABLE Article_Content ADD CONSTRAINT Article_Content__UN UNIQUE ( a_title ) ;
CREATE TABLE Article_States
(
id VARCHAR2 (32) DEFAULT sys_guid() NOT NULL ,
a_state VARCHAR2 (50) DEFAULT 'ERROR'
) ;
ALTER TABLE Article_States ADD CONSTRAINT Article_States_PK PRIMARY KEY ( id ) ;
好吧,我发现了
我需要清除第一个命令.ExecuteNonQuery()
之后的命令.Parameters
,否则第二个命令将尝试绑定第一个命令之后定义的参数。(显然我不希望这样,因为第二个insert没有:aid和:auserId参数)
调用了两次command.ExecuteOnQuery()。哪一个导致了错误?
command.Parameters.Clear();