c#中的错误:处理命令时出现一条或多条错误消息
这是我的代码:c#中的错误:处理命令时出现一条或多条错误消息,c#,oracle,C#,Oracle,这是我的代码: OleDbConnection con = new OleDbConnection(); con.ConnectionString = "Provider=MSDAORA;Data Source=data;Password=ss8_pakhsh;User ID=SHIFTS_N"; con.Open(); int MAXID = 1175; MAXID++; string sqlcommand = "INSERT INTO GROUPS(GROUP_ID
OleDbConnection con = new OleDbConnection();
con.ConnectionString = "Provider=MSDAORA;Data Source=data;Password=ss8_pakhsh;User ID=SHIFTS_N";
con.Open();
int MAXID = 1175;
MAXID++;
string sqlcommand = "INSERT INTO GROUPS(GROUP_ID, GROUP_NAME,DEPT_ID) " +
"VALUES(" + MAXID + ",'"
+ textBox1.Text +
"', SELECT DEPT_ID FROM PERSONNEL_TEMP.DEPARTMENT WHERE DEPARTMENT_NAME="+comboBox1.Text;
OleDbDataAdapter oda = new OleDbDataAdapter(sqlcommand, con);
oda.Fill(dt);
con.Close();
当我运行它时,收到以下错误:
处理命令期间发生一个或多个错误
我认为我的查询有问题,因为当我在TOAD editor(用于oracle)上输入它时,会出现以下错误:
ORA-00936:缺少表达式
当您从另一个表中选择查询时,需要将您的
select
查询放在大括号中,以便将其放在()
中。另外,Department\u Name
外观为type varchar
,因此其值应位于单引号中。像这样更改您的查询
string sqlcommand = "INSERT INTO GROUPS(GROUP_ID, GROUP_NAME,DEPT_ID) " +
"VALUES(" + MAXID + ",'"
+ textBox1.Text +
"',(SELECT DEPT_ID FROM PERSONNEL_TEMP.DEPARTMENT WHERE DEPARTMENT_NAME='"+comboBox1.Text+"'"));
还可以使用参数化
查询来防止sql注入
查询中缺少引号和偏执
为了避免这种情况,应该使用参数化查询,如下所示
string sqlcommand ="INSERT INTO GROUPS(GROUP_ID, GROUP_NAME,DEPT_ID)
VALUES(?,?,SELECT DEPT_ID FROM PERSONNEL_TEMP.DEPARTMENT WHERE DEPARTMENT_NAME=?)";
OleDbConnection oledbConnection = new OleDbConnection(con);
OleDbCommand oledbCommand = new OleDbCommand(sqlcommand , oledbConnection);
oledbCommand.Parameters.AddWithValue("?", txtquotationno.Text);
oledbCommand.Parameters.AddWithValue("?", cmbjobcode.Text);
oledbCommand.Parameters.AddWithValue("?", comboBox1.Text);
OleDbDataAdapter oda = new OleDbDataAdapter(oledbCommand);
DataTable dt= new DataTable();
oda.Fill(dt);
-您不应该将SQL语句连接在一起-使用参数化查询来避免SQL注入正确的引号可能会导致错误..检查引号字符串。最重要的是SQL注入!我这样做了,但仍然得到了错误发生在oda.Fill(dt)上的错误;