2013-08-20 85 views
6

我正在用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

它不回答你的问题,但我真的建议您使用参数化查询,而不是通过连接字符串生成它们。关于如何做到这一点,SO上有大量的帖子。 –

+0

为什么给你添加'Q.Append(“)”);'如果你想先删除逗号, –

+2

解决方案不是删除逗号,而是以不同的方式执行此操作。 –

回答

2

此:

Q.Append(")"); 

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

Q.Append(")"); 

支票if (col_no > 0)是有点过分,因为如果没有列,查询仍然会失败其他原因更换,但如果我们考虑这个模板上如何组合一个StringBuilder中的字符串,然后检查是要做的事情。

啊......用这种方式建立查询是错误要做的事情。

0
  1. 正确的方式来实现你的目标是使用参数化查询。
  2. 没有把支架
  3. 纯回答你的问题可以在此之前删除最后一个昏迷的可能性:

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

或本:

string query = ext.Remove(ext.LastIndexOf(","), 1); 
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-query我强烈建议使用sql参数来防止sql -in登录。所以不要在你的sql-string中包含这些值。

13

您可以使用“删除”的方法,在一个位置删除特定字符:

query = query.Remove(query.LastIndexOf(","), 1); 
0

试试这个。简单的逻辑

检查以下假设条件befor添加逗号线

    **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

更换

  Q.Append(","); 

for循环里面有

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