使用多个循环将行插入SQL Server数据库

时间:2012-12-07 15:43:59

标签: c# sql-server

我正在收集我想要存储在数据库表中的用户及其信息列表。我在Microsoft SQL Server Management Studio中设置了此数据库。数据库的主键设置为自动递增。当列表中没有更多用户时,我需要循环结束。我在测试帐户中有两个有效用户,但我目前只有一个用户插入。我最好使用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 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:0)

我认为你需要替换:

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

使用:

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

答案 2 :(得分:0)

你的问题是你有2个循环。你需要删除第一个for循环,而不是每次通过foreach()

执行时增加一个int变量

您正在添加具有相同UserID的多个用户

int userID = 1

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

    userID++;
}

答案 3 :(得分: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();
            }
        }