代码之家  ›  专栏  ›  技术社区  ›  C Sharper

c中使用的sql存储过程#

  •  0
  • C Sharper  · 技术社区  · 11 年前

    我在sql中使用了以下存储过程:

    alter procedure [dbo].[usp_Member_Org_OnGoingJobs]
    (
        @idUser varchar(50)
    
    )
    as
    begin
    declare @qry as varchar(max)
    set @qry='select J.idJob,j.DateAdded,j.OpenedByWho,j.JobAddress ,j.final,j.idOrg,j.note
                                  from Job J 
                                  inner join Users U on
                                  U.idOrg=J.idOrg
                                  where U.IdUser='+ @idUser+ '
                                  and ISNULL(j.Final,'')='' 
                                  order by idJob'
    
    
      execute(@qry)
    end
    GO
    

    此存储过程在sql中成功形成。

    但是,当我试图通过asp.net c#使用它们时,它给了我错误:

    Incorrect syntax near the keyword 'order'.
    

    一切似乎都是正确的。

    请告诉我我在哪里出错??

    编辑:

    private void BindOnGoingJobs()
        {
            string sqlOnGoingJobs = "usp_Member_Org_OnGoingJobs";
    
            DataTable dtJobList = new DataTable();
            ArrayList paramList = new ArrayList();
    
            paramList.Add(new ParamData("@idUser", Convert.ToString(Session["idUser"])));
            dtJobList = obj.ExecuteProcedureAndGetDataTable(sqlOnGoingJobs, paramList);
            grdOnGoingJobs.DataSource = dtJobList;
            grdOnGoingJobs.DataBind();
    
            paramList.Clear();
        }
    
     public DataTable ExecuteProcedureAndGetDataTable(string procedureName, ArrayList Parameters)
            {
                DataTable dt = new DataTable();
                try
                {
                    if (con.State != ConnectionState.Open)
                        con.Open();
                    cmd.Connection = con;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = procedureName;
                    cmd.Parameters.Clear();
                    foreach (ParamData p in Parameters)
                    {
                        cmd.Parameters.AddWithValue(p.pName, p.pValue);
                    }
                    da.SelectCommand = cmd;
                    da.Fill(dt);
                    con.Close();
                    return dt;
                }
                catch (Exception ex)
                {
                    con.Close();
                    return dt;
                }
            }
    
    3 回复  |  直到 11 年前
        1
  •  4
  •   Steve    11 年前

    您需要在ISNULL检查周围使用双引号

    set @qry='select J.idJob,j.DateAdded,j.OpenedByWho,j.JobAddress ,j.final,j.idOrg,j.note
                              from Job J 
                              inner join Users U on
                              U.idOrg=J.idOrg
                              where U.IdUser='+ @idUser+ '
                              and ISNULL(j.Final,'''')='''' 
                              order by idJob'
    
        2
  •  1
  •   Puneet Khurana    11 年前

    您需要通过这样放置两次引号来转义引号。

    and ISNULL(j.Final,'''')=''''

    检查此日志 http://blog.sqlauthority.com/2008/02/17/sql-server-how-to-escape-single-quotes-fix-error-105-unclosed-quotation-mark-after-the-character-string/

        3
  •  0
  •   Umesh    11 年前

    只需按顺序添加表别名,我想应该可以解决问题

    按J.idJob排序