2013-08-20 36 views
6

Tôi đang tạo chuỗi bằng StringBuilder.Cách xóa LAST INSTANCE của một ký tự khỏi một chuỗi

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(); 

Tuy nhiên, tôi nhận được "," ở cuối chuỗi. tôi đã cố gắng sử dụng

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

để loại bỏ các dư thừa ",", nhưng điều này cũng loại bỏ các ")".

Làm cách nào để xóa chỉ dấu phẩy cuối cùng?

thực tế kết quả: INSERT INTO .... VALUES('1','2','3',)

mong muốn kết quả: INSERT INTO .... VALUES('1','2','3')

+5

Nó không trả lời câu hỏi của bạn, nhưng tôi thực sự khuyến khích bạn sử dụng các truy vấn tham số chứ không phải tạo ra chúng bằng cách ghép chuỗi. Có rất nhiều bài viết về SO về cách thực hiện điều này. –

+0

Tại sao thêm bạn 'Q.Append (") ");' ở tất cả nếu bạn muốn loại bỏ dấu phẩy đầu tiên? –

+2

Giải pháp không phải là để loại bỏ dấu phẩy, nhưng để làm điều này một cách khác nhau. –

Trả lời

2

này:

Q.Append(")"); 

thay thế với

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

Q.Append(")"); 

Vui lòng cung if (col_no > 0) là một chút quá nhiệt tình, bởi vì nếu không có cột, truy vấn vẫn sẽ thất bại vì những lý do khác, nhưng nếu chúng ta xem xét đây là một mẫu về cách kết hợp các chuỗi trong một StringBuilder, sau đó séc là phải điều cần làm.

Ah ... Xây dựng truy vấn theo cách đó là sai điều cần làm.

0
  1. cách chính xác để đạt được mục tiêu của bạn là sử dụng một truy vấn tham số.
  2. có khả năng để xóa các tình trạng hôn mê cuối cùng trước khi đưa khung
  3. câu trả lời tinh khiết cho câu hỏi của bạn có thể là thế này:

.

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

hay này:

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

tôi sẽ đề nghị để loại bỏ các dấu phẩy đầu tiên trước khi bạn thêm cuối cùng ), vì vậy:

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(); 

Tuy nhiên, nếu bạn thực sự muốn tạo ra một sql-query tôi mạnh mẽ sẽ đề nghị sử dụng sql-tham số để ngăn chặn sql-injection. Vì vậy, không bao gồm các giá trị trong chuỗi sql của bạn.

13

Bạn có thể sử dụng "Remove" phương pháp để loại bỏ một nhân vật cụ thể ở một vị trí:

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

Hãy thử điều này.logic đơn giản

Kiểm tra dưới đây nếu tình trạng befor thêm dòng dấu phẩy

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

Với mã của bạn.

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

        } 
0

Thay

  Q.Append(","); 

bên trong cho vòng lặp với

  if (i != col_no - 1) 
      { 
       Q.Append(","); 
      } 
Các vấn đề liên quan