【发布时间】:2018-05-15 07:30:34
【问题描述】:
我有一个对象类,我将其转换为一个列表。我想将类转换成一个列表,所以我可以做一个 SQLBulkCopy,因为我当前的方法需要很长时间才能将数据写入 SQL 数据库表。
class ExtractedInfo
{
public string Date { get; set; }
public string Client { get; set; }
public string Path { get; set; }
}
List<ExtractedInfo> extractedList = new List<ExtractedInfo>();
try
{
Console.WriteLine("Writing to DB");
using (SqlConnection conn = new SqlConnection(connectionStringPMT))
{
conn.Open();
SqlCommand cmd =
new SqlCommand(
"IF NOT EXISTS (SELECT 1 FROM [FileTrckT] WHERE Path = @Path) " +
"INSERT INTO [FileTrckT] (Date, Client, Path, DateAddedToDb, FileName) " + // dont forget to add "DateAddedToDb" on live code
"VALUES (@Date, @Client, @Path, @DateAddedToDb, @FileName)");// dont forget to add " @DateAddedToDb" on live code
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
cmd.Parameters.Add("@Date", DbType.DateTime);
cmd.Parameters.Add("@Client", DbType.String);
cmd.Parameters.Add("@Path", DbType.String);
cmd.Parameters.Add(@"DateAddedToDb",DbType.DateTime); //uncomment on live code
cmd.Parameters.Add("@FileName", DbType.String);
foreach (var extractedRecord in extractedList)
{
cmd.Parameters[0].Value = extractedRecord.Date;
cmd.Parameters[1].Value = extractedRecord.Client;
cmd.Parameters[2].Value = extractedRecord.Path;
cmd.Parameters[3].Value = DateTime.Now; //uncomment on live code
cmd.Parameters[4].Value = extractedRecord.Path.Substring(extractedRecord.Path.LastIndexOf("/")+1);
cmd.ExecuteNonQuery();
}
conn.Close();
}
} catch(Exception ex)
{
Console.WriteLine(ex.Message.ToString());
Console.WriteLine("Error occured whilst inserting data into sql table FiletrckT");
log.Info("Error occured whilst inserting data into sql table FiletrckT");
log.Error(DateTime.Now + ": " + ex.Message.ToString());
}
}
catch(Exception ex)
{
log.Error(DateTime.Now.ToString() + " " + ex.Message.ToString());
Console.WriteLine(ex.Message);
}
}
【问题讨论】:
标签: c# sql sqlbulkcopy