我正在收集我想要存储在数据库表中的用户及其信息列表。我在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();
}
}
}
答案 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();
}
}