0

データベーステーブルに保存したいユーザーとその情報のリストを収集しています。このデータベースを Microsoft SQL Server Management Studio にセットアップしました。データベースの主キーは自動インクリメントに設定されています。リストにユーザーがいなくなったら、ループを終了する必要があります。テスト アカウントには 2 人の有効なユーザーがいますが、現在持っているユーザーは 1 人しか挿入されません。を使用したほうがよいでしょうsqlDataAdapterか?

List<User> result = ims.ListUsers(req).ListUsersResult.Users;

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ConnectionString);

for (int i = 1; i < result.Count(); i++)
{
    foreach (User user in result.Where(x => x.UserName.Contains('@')))
    {
        string sql = @"INSERT INTO UserInfo (UserID, UserName) VALUES (@UserID, @UserName)";

        using (SqlCommand command = new SqlCommand(sql, connection))
        {
            command.Parameters.AddWithValue("@UserID", i);
            command.Parameters.AddWithValue("@UserName", user.UserName);

            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();
        }
    }
}
4

4 に答える 4

3

for-loop主キー列を手動で設定するべきではないため、ID を作成するために外部が必要な理由がわかりません。自動的に増加します。また、終了したら常に接続を閉じる必要があります

完全なコードは次のとおりです。

string sql = @"INSERT INTO UserInfo (UserName) VALUES (@UserName)";
using(var con = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ConnectionString))
using(var cmd = new SqlCommand(sql, con))
{
    con.Open();
    foreach(var user in result.Where(x => x.UserName.Contains('@')))
    {
        // you don't need to set the UserID when you've set made it an Identity column
        cmd.Parameters.AddWithValue("@UserName", user.UserName);
        cmd.ExecuteNonQuery();
    }
}
于 2012-12-07T15:45:44.173 に答える
0

あなたの問題は、2 つのループがあることです。最初の for ループを削除し、代わりに foreach() を実行するたびに int 変数をインクリメントする必要があります

同じ UserID を持つ複数のユーザーを追加しています

int userID = 1

foreach (User user in result.Where(x => x.UserName.Contains('@')))
{
    // your code

    userID++;
}
于 2012-12-07T15:47:34.733 に答える
0

自動インクリメント フィールドを更新する必要はありません。SQL サーバーによって自動的にカウントされます。このコードを試してください:

        List<User> result = ims.ListUsers(req).ListUsersResult.Users;

        SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ConnectionString);

        foreach (User user in result.Where(x => x.UserName.Contains('@')))
        {
            string sql = @"INSERT INTO UserInfo (UserName) VALUES (@UserName)";

            using (SqlCommand command = new SqlCommand(sql, connection))
            {
                command.Parameters.AddWithValue("@UserName", user.UserName);
                connection.Open();
                command.ExecuteNonQuery();
                connection.Close();
            }
        }
于 2012-12-07T15:55:09.310 に答える
0

交換する必要があると思います:

for (int i = 1; i < result.Count(); i++)

と:

for (int i = 0; i < result.Count(); i++)
于 2012-12-07T15:46:37.697 に答える