3

以下のwhileループを見てください。

SqlDataReader dr;

while (dr.Read())
{

Response.Write("insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>");

}

最後に(その前に
)コンマを付けて何かを印刷しています。しかし、それが印刷される最後の時、私はそのコンマが欲しくありません。このループが最後に実行されていることを確認するにはどうすればよいですか?このコンマを変更して印刷されないようにするためです。

4

8 に答える 8

3

少し再構築します。読者の前に、偽のブール値をインスタンス化します。最初に読んだ後、それをtrueに設定します。次に、読み取りコードで、trueの場合は追加し、コンマを追加して前の行に区切ります。そうすれば、それが最後の行であるかどうかを心配する必要はありません。これは、コンマを追加してブレークする次の行がないためです。

于 2013-01-17T12:16:55.943 に答える
2

正確に何が必要かは完全にはわかりませんが、以下に基づいています。

しかし、それが印刷される最後の時、私はそのコンマが欲しくありません。

ループを終了した後、 string.TrimEndを使用できます。

string str = yourstring.TrimEnd(',');

文字列の最後にカンマが含まれている場合は削除され、含まれていない場合は文字列がそのまま残ります。

編集:Respose.Writeの部分を見逃しました。

whileループで文字列を作成してから、新しい文字列を使用してstring.TrimEnd後で使用することができます。Response.Write

于 2013-01-17T12:13:48.040 に答える
2

一般に、whileループの最後の反復を行っているかどうかを知ることは実際には不可能です。ループと半分を使用できますが、最後ではありませんが、ループの最初の実行は次のように異なります。

SqlDataReader dr = ...;

if (dr.Read())
{
  //no comma
  Response.Write("insert into test values(N'"+dr[0]+"', N'"+dr[1]+"')");
}

while (dr.Read())
{
  //put in a comma / break for the previous item
  Response.Write(",<br>insert into test values(N'"+dr[0]+"', N'"+dr[1]+"')");
}

ただし、次のように、aを使用しStringBuilderてメモリ内に文字列を作成してからResponse.Write、一度にすべてを作成することをお勧めします。

StringBuilder sb = new StringBuilder();    
while (dr.Read())
{
  //put in a comma / break for the previous item
  sb.Append("insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>");
}
sb.Remove(sb.Length-5,5); // remove the last ,<br>

Response.Write(sb.ToString());
于 2013-01-17T12:17:40.977 に答える
0

TrimEnd最後のカンマを削除する方法を使用できます。

配列で指定された文字セットの末尾にあるすべての文字列を現在のStringオブジェクトから削除します

str.TrimEnd(',');

これらと同様の指示に従う必要があります。

string str = null;
while (dr.Read())
{

str += "insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>";

}

str = str.TrimEnd(',');
Response.Write(str);
于 2013-01-17T12:14:20.000 に答える
0

変数が必要だと思います!

        bool first=true;
        while (dr.Read())
        {
            if (first) first = false;
            else Response.Write(",<br>");
            Response.Write("insert into test values(N'" + dr[0] + "', N'" + dr[1] + "')");

        }
于 2013-01-17T12:20:41.727 に答える
0

このようにしてみてください...それはあなたを助けます..

SqlDataReader dr;

DataTable dt = new DataTable();

dt.Load(dr);

int _RowCount = dt.Rows.Count;

int inc = 0 ; 


while (dr.Read())
{

inc = inc + 1;

if(inc==_RowCount)

//Without Comma

else

//With Comma

}
于 2013-01-17T12:27:21.457 に答える
0
SqlDataReader dr;

while (dr.Read())
{

Response.Write("insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>");

}

Respose.Writeを使用する代わりに、次のような変数に文字列を配置します

while (dr.Read())
    {

   string yourstring =  "insert into test values(N'"+dr[0]+"', N'"+dr[1]+"'),<br>";

    }

ループの後、使用できます

string str = yourstring.Substring(0, yourstring.Length - 1);
于 2013-01-17T12:35:07.360 に答える
0
    int i = 0;
    while (dr.Read())
    {
        if (i != 0)
        {
            Response.Write(",<br>");
        }
        Response.Write("insert into test values(N'" + dr[0] + "', N'" + dr[1] + "')");
        i++;
    }

それは私の問題を解決しました。また、@SWekoのソリューションも正常に機能しました。助けてくれてありがとう。

于 2013-01-17T12:49:42.830 に答える