如何在查询结束时修剪或删除“,”?

时间:2010-06-14 10:35:11

标签: c# .net visual-studio visual-studio-2008

我尝试编写查询,但我的查询以“Control nvarchar(500)”结束。我想完成“控制nvarchar(500)”如何删除“,”,“”?

 void SqlTable(List listMyColumnNames, string TableName)
        {

            string  Text = "Create table ENG_"+TableName+" (ENG_"+TableName+"_ID integer PRIMARY KEY identity(1,1), ";
            char[] MyChar = {',', ' ' };
            for (int i = 0; i < listMyColumnNames.Count; )
            {
                 Text+=listMyColumnNames[i]+" nvarchar(500), ";
                 if (i == listMyColumnNames.Count-1)
                     Text.TrimEnd(MyChar);
                 i++;
            }
            Text+=" )";

5 个答案:

答案 0 :(得分:11)

我想你可能想看看String.Join。你可以做的是转换你的列名字符串,包含你的colum的SQL定义,例如MyColumnName[1]+" nvarchar(500)", into a listMyColumnDef array, then以逗号作为分隔符加入该数组。

好处:

  • 不'如果我是最后一个条目',
  • 明确分隔列名和列的SQL表示

缺点......无:)

for( String name in listMyColumnNames ) {
   listMyColumnDefs.Add( name + " nvarchar(500)" );
}

String mycolumndef = String.Join( listMyColumnDefs, ", ");

答案 1 :(得分:3)

有很多方法可以解决这个问题,但这是代码中的问题:

             if (i == listMyColumnNames.Count-1)
                 Text.TrimEnd(MyChar); // doesn't work like this!

String是不可变的:你不能在它上面调用一个方法,并期望它被方法改变。 TrimEnd代替返回 new String,因此您需要做的是:

                 Text = Text.TrimEnd(MyChar); // now works fine!

相关问题

答案 2 :(得分:0)

        for (int i = 0; i < listMyColumnNames.Count; ++i)
        {
             Text += listMyColumnNames[i] + " nvarchar(500)";
             if (i < listMyColumnNames.Count-1)
                 Text += ", ";
        }

答案 3 :(得分:0)

或者你可以删除你的Trim调用并添加`Text = Text.Replace(“,)”,“)”);'在最后。

答案 4 :(得分:0)

您是否考虑过使用StringBuilder对象来构建字符串,而不是在循环中连接您的字符串!

http://www.yoda.arachsys.com/csharp/stringbuilder.html