/// <summary>
        /// 查询字符串最多支持2个表
        /// </summary>
        /// <param name="top">填写0时代表全部</param>
        /// <param name="selname">查询字段名称如有2个表带表名</param>
        /// <param name="sqltab">查询表的名称前面为主表</param>
        /// <param name="sqlJoin">链接字符串前面为主表</param>
        /// <param name="sqlwhere">条件语句</param>
       /// <param name="SqlOrder">排序字段</param>
       /// <param name="SqlOrderdc">排序方向</param>
       /// <returns></returns>
        public string SqlStrInfo(int top,string[] selname, string [] sqltab, string []sqlJoin,string [] sqlwhere,string [] SqlOrder,string [] SqlOrderdc)
        {            string aa = @"SELECT   BigSort.title, MidSort.bid, MidSort.istop, BigSort.id, MidSort.title AS Expr1
FROM      BigSort INNER JOIN
                MidSort ON BigSort.id = MidSort.bid";
            StringBuilder str = new StringBuilder();
            str.Append(" select ");
            if (top == 0)
            {
                str.Append(" top " + top + " ");
            }
            if (selname != null)
            {
                for (int i = 0; i < selname.Length; i++)
                {
                    str.Append(selname[i].ToString());
                    if (selname.Length - 1 != i)
                    {
                        str.Append(" , ");
                    }
                }
            }
            else
            {
                str.Append(" * ");
            }
            str.Append(" from ");
            if (sqltab.Length == 2)
            {
                str.Append(sqltab[0].ToString() + " INNER JOIN " + sqltab[1].ToString() + " on ");
                str.Append(sqlJoin[0] + " = " + sqlJoin[1]);
            }
            else
            {
                str.Append( sqltab[0].ToString() );
            }            if (sqlwhere != null)
            {
                str.Append(" where ");
                for (int i = 0; i < sqlwhere.Length; i++)
                {
                    str.Append(sqlwhere[i].ToString() + " = @" + sqlwhere[i]);
                    if (sqlwhere.Length - 1 != i)
                    {
                        str.Append(" and ");
                    }
                }
            }
            if (SqlOrder != null)
            {
                str.Append(" order by ");
                for (int i = 0; i < SqlOrder.Length; i++)
                {
                    str.Append(SqlOrder[i].ToString() + " " + SqlOrderdc[i].ToString());
                    if (SqlOrder.Length - 1 != i)
                    {
                        str.Append(" , ");
                    }
                }
            }
            return str.ToString();
        }
我想问下这个sql拼接语句好不好。另希望求一个拼接语句功能类似上面这个的谢谢

解决方案 »

  1.   

    stringbuilder挺好的嘛,至少比用string来存储好,坐等下楼
      

  2.   

    视图不怎么会。存储过程一个操作对应一个写的太多了。我想用这个拼接语句 这样下次在做查询的时候可以直接通过这样就能调用不需要在写sql 查询语句了。
                 string [] tab={"bigsort","midsort"};
               string [] tabjoin={"bigsort.id","midsort.id"};
               string [] sqlor={"bigsort.id","midsort.id"};
               string [] sqlordc={"desc","desc"};
               string [] sqlwhere={"bid.id"};
               string sqlstr = sqlhp.SqlStrInfo(0, null, tab, tabjoin, sqlwhere, sqlor, sqlordc);
               SqlParameter[] par =
              {
                  new SqlParameter("@bid.id",SqlDbType.Int)
              };
               par[0].Value = id;
      

  3.   

    类似这种       
         /// <summary>
            /// 根据ID删除
            /// </summary>
            /// <param name="tbname">表名</param>
            /// <returns> where id=@id</returns>
            public string DelStr(string tbname)
            {
                StringBuilder str = new StringBuilder();
                str.Append(" delete from " + tbname);
                str.Append(" where id=@id ");
                return str.ToString();
            }
    以后调用删除语句可以直接通过传递 表名和id 值就能删除了。不 需要在写查询语句了。现在刚学这些。所有有些不太懂想问下。 
           public void DelBigSort(int id)
            {
                SqlParameter[] par = 
                 {
                  new SqlParameter("@id",SqlDbType.Int)
                 };
                par[0].Value = id;
                sqlhp.ExCmdNon(sqlhp.DelStr("BigSort"), par);
            }
      

  4.   

    看不出这个方法的作用,你要的sql 举个例子"select a,b,c,d,e,f from A,b where a.a=b.b and c='xx'  order by f  你要先把这个完整sql 拆成参数传进你写的方法,然后这个方法再拼接成这个sql我汗,你这不白忙活了还不如直接写sql呢
      

  5.   

    这个熟练了以后就不需要先写这个完整的sql了。直接调用这个方法写参数进去了那你有什么好的方法吗?
    主要是写sql太多看着不舒服。