尽管过程正常,但为什么参数化查询不起作用

时间:2014-02-25 10:13:42

标签: c# asp.net ado.net informix parameterized-query

我使用以下方法计算数据:

  public static int PrepareData(int year, int month, int calcYear)
        {
            using (IfxConnection con = new IfxConnection(ConfigurationManager.ConnectionStrings["testable"].ToString()))
            {
                int res = 0;
                StringBuilder cmdTxt = new StringBuilder();
                cmdTxt.Append(" hk_calc_data ");
                using (var myIfxCmd = new IfxCommand(cmdTxt.ToString(), con))
                {
                    myIfxCmd.CommandType = CommandType.StoredProcedure;

                    myIfxCmd.Parameters.Add("p_year", IfxType.Integer);
                    myIfxCmd.Parameters.Add("p_month", IfxType.Integer);
                    myIfxCmd.Parameters.Add("p_calc_year", IfxType.Integer);

                    if (con.State == ConnectionState.Closed)
                    {
                        con.Open();
                    }
                    myIfxCmd.Parameters[0].Value = year;
                    myIfxCmd.Parameters[1].Value = month;
                    myIfxCmd.Parameters[2].Value = calcYear;
                    myIfxCmd.CommandTimeout = 1000;
                    res = myIfxCmd.ExecuteNonQuery();
                }
                con.Close();
                con.Dispose();
                return res;
            }
        }

它不需要时间,总是返回-1!虽然当我在SQL编辑器中使用相同的参数运行它时,它需要大约4分钟才能完成并返回1作为结果!

1 个答案:

答案 0 :(得分:1)

也许先尝试清除params,然后使用Add添加值。

                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                }
                myIfxCmd.Parameters.Clear();
                myIfxCmd.Parameters.Add("p_year", IfxType.Integer, year);
                myIfxCmd.Parameters.Add("p_month", IfxType.Integer, month);
                myIfxCmd.Parameters.Add("p_calc_year", IfxType.Integer, calcYear);