C# 使用多个循环向SQL Server数据库插入行
我正在收集要存储在数据库表中的用户及其信息的列表。我在Microsoft SQL Server Management Studio中设置了此数据库。数据库的主键设置为自动递增。我需要在列表中没有更多用户时结束循环。我在测试帐户中有两个有效用户,但是我当前的帐户只插入一个用户。我最好使用C# 使用多个循环向SQL Server数据库插入行,c#,sql-server,C#,Sql Server,我正在收集要存储在数据库表中的用户及其信息的列表。我在Microsoft SQL Server Management Studio中设置了此数据库。数据库的主键设置为自动递增。我需要在列表中没有更多用户时结束循环。我在测试帐户中有两个有效用户,但是我当前的帐户只插入一个用户。我最好使用sqlDataAdapter List<User> result = ims.ListUsers(req).ListUsersResult.Users; SqlConnection connectio
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();
}
}
}
List result=ims.ListUsers(req).ListUsersResult.Users;
SqlConnection连接=新的SqlConnection(ConfigurationManager.ConnectionString[“默认”].ConnectionString);
for(int i=1;ix.UserName.Contains('@'))中的用户)
{
字符串sql=@“插入UserInfo(UserID,UserName)值(@UserID,@UserName)”;
使用(SqlCommand=newsqlcommand(sql,连接))
{
command.Parameters.AddWithValue(“@UserID”,i);
command.Parameters.AddWithValue(“@UserName”,user.UserName);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
}
我不明白为什么您需要外部for循环来创建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();
}
}
我不明白为什么您需要外部for循环
来创建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();
}
}
我认为您需要替换:
for (int i = 1; i < result.Count(); i++)
for(int i=1;i
与:
for(int i=0;i
我认为您需要更换:
for (int i = 1; i < result.Count(); i++)
for(int i=1;i
与:
for(int i=0;i
您的问题是有两个循环。您需要删除第一个for循环,并在每次通过foreach()执行时增加一个int变量
您正在添加具有相同用户ID的多个用户
int userID = 1
foreach (User user in result.Where(x => x.UserName.Contains('@')))
{
// your code
userID++;
}
你的问题是你有两个循环。您需要删除第一个for循环,并在每次通过foreach()执行时增加一个int变量
您正在添加具有相同用户ID的多个用户
int userID = 1
foreach (User user in result.Where(x => x.UserName.Contains('@')))
{
// your code
userID++;
}
您不需要更新自动递增字段,它将由SQL server自动计数。请尝试以下代码:
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();
}
}
List result=ims.ListUsers(req).ListUsersResult.Users;
SqlConnection连接=新的SqlConnection(ConfigurationManager.ConnectionString[“默认”].ConnectionString);
foreach(result.Where(x=>x.UserName.Contains('@'))中的用户)
{
字符串sql=@“插入用户信息(用户名)值(@UserName)”;
使用(SqlCommand=newsqlcommand(sql,连接))
{
command.Parameters.AddWithValue(“@UserName”,user.UserName);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
您不需要更新自动递增字段,它将由SQL server自动计数。请尝试以下代码:
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();
}
}
List result=ims.ListUsers(req).ListUsersResult.Users;
SqlConnection连接=新的SqlConnection(ConfigurationManager.ConnectionString[“默认”].ConnectionString);
foreach(result.Where(x=>x.UserName.Contains('@'))中的用户)
{
字符串sql=@“插入用户信息(用户名)值(@UserName)”;
使用(SqlCommand=newsqlcommand(sql,连接))
{
command.Parameters.AddWithValue(“@UserName”,user.UserName);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
既然PK UserID是自动增加的,为什么要用值插入它?第二次运行时将生成异常。我不明白为什么要使用for
循环。似乎,foreach
正在做您需要的一切。既然PK UserID是自动增加的,为什么要将其与值一起插入?第二次运行时将生成异常。我不明白为什么要使用for
循环。看来,foreach
正在做你需要的一切。你的第一个答案是错误的,这不会有帮助,直到有两个循环,他正在更新自动递增字段。这对我来说是个好办法。我感谢你的帮助。只是其中一个星期五!再次感谢@谢尔盖:是的,你说得对。for循环只是冗余的。编辑了我的答案。还从插入结构中删除了UserId部分。我也这样做了。谢谢你。你的第一个答案是错误的,这将不会有帮助,直到有两个循环,他正在更新自动递增字段。这为我做了诀窍。我感谢你的帮助。只是其中一个星期五!再次感谢@谢尔盖:是的,你说得对。for循环只是冗余的。编辑了我的答案。还从插入结构中删除了UserId部分。我也这样做了。非常感谢。