我想像这样执行(INSERT .. SELECT
)语句:
cmdTxt.Clear();
cmdTxt.Append(" INSERT INTO aast:sc1pen ");
cmdTxt.Append(" SELECT action_month,action_year,200,emp_num,penalty_action , ");
cmdTxt.Append(" 'APPLY ' || penalty_reason || ' day ' , 0 , 0 ");
cmdTxt.Append(" FROM sc2pen WHERE sal_year = ? and sal_month = ? and penalty_type = 1 and pay_type = 0 ");
myIfxCmd.CommandText = cmdTxt.ToString();
myIfxCmd.Parameters.Clear();
myIfxCmd.Parameters.Add("sal_year", IfxType.Integer);
myIfxCmd.Parameters.Add("sal_month", IfxType.Integer);
myIfxCmd.Parameters[0].Value = penaltyDt.Rows[0]["sal_year"];
myIfxCmd.Parameters[1].Value = penaltyDt.Rows[0]["sal_month"];
现在我很困惑,我应该使用
myIfxCmd.ExecuteNonQuery();
要执行这样的查询,尽管它包含读操作?
答案 0 :(得分:1)
首先,进行内联SQL并不是一个好主意,因为这不会产生可维护的代码。这应该在理想情况下在存储过程内的数据库中完成 - 特别是用于将数据插入现有表中。然后,您可以执行SP并在输出参数内返回数据。
但是,如果你真的想沿着这条路走,那就执行
ExecuteNonQuery()
...不会返回任何数据,只会记录受影响的记录。 如果要返回某些数据,例如新插入记录的ID,则需要使用
ExecuteScalar()
...这将允许返回标量值。