ORA-01036:在填写数据表时出现了非法的变量名称。

问题描述 投票:0回答:1

我在oracle DB中有一个视图,我试图从一个方法中调用它来将视图中的数据绑定到数据表中,但它引发了异常。

请帮助我。

异常是在这一行中产生的( dataAdapter.Fill(dataTable);)

 private static void ViewSelectedJobHistory(Document imDocument, Job selectedJob)
            {
                DataTable dataTable = new DataTable();
                try
                {
                    if (imDocument != null && selectedJob != null)
                    {
                        //string query =JobResource.QueryJobHistory;
                        //int id=selectedJob.ID;                
                        //using (Command imCommand = new Command(query, imDocument.Connection))
                        string query = string.Format("select FID,F_CLASS_NAME,JOB_OPERATION_TYPE,OPERATION_DATE from JOB_EXPLORER_FETCH where JOB_ID={0}",selectedJob.ID);
                            //"select FID,F_CLASS_NAME,JOB_OPERATION_TYPE,OPERATION_DATE from JOB_EXPLORER_FETCH where JOB_ID=34680";
                        string abc = query;
                        using (Command imCommand = new Command(query, imDocument.Connection))
                        {
                            imCommand.Parameters.Add(new DataParameter("1", DbDataType.String, selectedJob.ID.ToString(), ParameterDirection.Input));

                            using (DataAdapter dataAdapter = new DataAdapter(imCommand))
                            {
                                dataAdapter.Fill(dataTable);
                                if (dataTable != null && dataTable.Rows.Count > 0 )
                                {
                                    if (instanceJob == false)
                                    {
                                        ViewSelectedJobHistory viewSelectedJobHistory = new ViewSelectedJobHistory(imDocument, dataTable, selectedJob);
                                        viewSelectedJobHistory.Show();
                                        instanceJob = true;
                                    }
                                }

exceptrion message when it hits dataadapter.fill method

c# oracle ado.net oracle10g oracle-sqldeveloper
1个回答
0
投票

你试图两次绑定参数,而且也没有使用Oracle库(猜测是因为我没有看到你的连接打开代码)。

SQL命令应该是这样的。

string query = "select FID,F_CLASS_NAME,JOB_OPERATION_TYPE,OPERATION_DATE from JOB_EXPLORER_FETCH where JOB_ID=:0";

然后当你添加参数时,它应该用你的值替换掉:0。 这也是避免SQL注入攻击的关键。 另外你应该使用一个OracleParameter类。

imCommand.Parameters.Add(new OracleParameter("1", OracleDbType.NVarchar2, 100, selectedJob.ID.ToString(), ParameterDirection.Input));
© www.soinside.com 2019 - 2024. All rights reserved.