我有IList,我试图插入SQL table
并遇到性能问题。我现在尝试使用IList<string>
将SqlBulkCopy
的内容插入到SQL表中。
public string toTbl(IList < string > records) {
const string connectionString = @ "Data Source=sqlserver;Initial Catalog=dbname;User Id=user;Password=password;";
try {
var studentData = from record in records
let srec = record.Split('|')
select new Student {
ID = srec[0],
Student = srec[1],
Grade = srec[2]
};
foreach(var i in studentData) {
using(SqlConnection sqlConnection = new SqlConnection(connectionString)) {
sqlConnection.Open();
using(SqlCommand cmd = new SqlCommand("INSERT INTO [Student] ([ID], [Student], [Grade]) VALUES (@ID, @Student, @Grade)", sqlConnection)) {
cmd.Parameters.AddWithValue("@ID", i.ID);
cmd.Parameters.AddWithValue("@Student", i.Student);
cmd.Parameters.AddWithValue("@Grade", i.Grade);
cmd.ExecuteNonQuery();
}
sqlConnection.Close();
}
}
} catch (Exception ex) {
message = ex.Message;
}
}
答案 0 :(得分:0)
您不应使用SqlBulkCopy插入List。 请参阅此link for SqlBulkCopy
您需要将数据构造到数据表或数据行或读取器,以使用SqlBulkCopy将其写入数据库。
此外,您不应该在您的评论中添加值到标识列,我认为[ID]是您的标识列。下面的示例有一个数据表(dtStudent),其中包含2列Student和Grade,它会将所有记录写入数据库
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(strConnection))
{
bulkCopy.ColumnMappings.Add("Student", "Student");
bulkCopy.ColumnMappings.Add("Grade", "Grade");
bulkCopy.DestinationTableName = "Student";
bulkCopy.WriteToServer(dtStudent);
}
您也可以使用DataRow []进行插入,请参阅上面提到的链接