如何从字符串中删除最后一个字符的实例

7

我正在使用 StringBuilder 构建一个字符串。

StringBuilder Q = new StringBuilder();
Q.Append("INSERT INTO ");
Q.Append(_lstview_item);
Q.Append(" VALUES");
Q.Append("("); 
for (i = 0; i < col_no; i++)
{
    Q.Append("'");
    Q.Append(col_value[i]);
    Q.Append("'");
    Q.Append(",");
} 
Q.Append(")");
string query = Q.ToString();

然而,我的字符串末尾出现了一个","。我尝试使用。
string query = ext.Substring(0, ext.LastIndexOf(",") + 1);

如何只移除最后一个逗号而保留括号闭合符号")"

实际输出: INSERT INTO .... VALUES('1','2','3',)

期望输出: INSERT INTO .... VALUES('1','2','3')


5
回答可能与您的问题无关,但我真心鼓励您使用参数化查询而不是通过串联字符串生成查询语句。关于如何实现这一点,Stack Overflow上有很多帖子。 - Daniel Kelley
2
解决方案不是去掉逗号,而是以不同的方式处理。 - Grant Thomas
@TimSchmelter 有这样的推理,人们可能会问为什么它不仅在循环内有条件地添加。 - Grant Thomas
3
你总是离破产只有一个“Bobby Tables”之遥! - xanatos
我不知道如何在我的情况下使用参数化查询。我正在从datagridview中提取要添加的值,这就是为什么我转而使用stringBuilder的原因。 - Anoushka Seechurn
显示剩余3条评论
6个回答

18
您可以使用“Remove”方法在特定位置删除特定字符:
query = query.Remove(query.LastIndexOf(","), 1);

2

This:

Q.Append(")");

替换为

if (col_no > 0)
{
    Q.Length--;
}

Q.Append(")");

判断语句 if (col_no > 0) 有点过头了,因为如果没有列,查询仍然会因其他原因失败,但是如果我们把它看作是如何在 StringBuilder 中组合字符串的模板,那么这个检查就是正确的。

啊...以那种方式构建查询是错误的。


1
我建议在添加最后一个)之前先删除逗号,即:
for (i = 0; i < col_no; i++)
{
    Q.Append("'");
    Q.Append(col_value[i]);
    Q.Append("'");
    Q.Append(",");

} 
if(col_no > 0) Q.Length --; // <-- this removes the last character
Q.Append(")");
string query = Q.ToString();

然而,如果你真的想创建一个 SQL 查询,我强烈建议使用 SQL 参数来防止 SQL 注入。因此,不要在你的 SQL 字符串中包含值。


0

试试这个。简单的逻辑

在追加逗号行之前检查下面的 if 条件

                  **if(i!=(col_no-1))
                    {
                    Q.Append(",");
                    }*

使用您的代码。

                 for (i = 0; i < col_no; i++)
                  {
                    Q.Append("'");
                    Q.Append(col_value[i]);
                    Q.Append("'");
                    **if(i!=(col_no-1))
                    {
                    Q.Append(",");
                    }**

                  } 

0
  1. 实现您的目标的正确方法是使用参数化查询。
  2. 在放置括号之前删除最后一个逗号的可能性是存在的。
  3. 对于您的问题,最简单的答案可能是:

.

string query = ext.Substring(0, ext.LastIndexOf(",")) + ext.Substring(ext.LastIndexOf(",") + 1);

或者这样:

string query = ext.Remove(ext.LastIndexOf(","), 1);

0

替换

            Q.Append(","); 

在 for 循环内部

            if (i != col_no - 1)
            {
                Q.Append(",");
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接