我正在使用 c# 在 .net 中构建一个 webApp。我上传备份文件(csv 文件)的代码有问题。
这是代码:
protected void UploadBackup(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(dataset1.ConnStr);
string filepath = ""+Server.MapPath("/backups/Species.csv");
StreamReader sr = new StreamReader(filepath);
string line = sr.ReadLine();
string[] value = line.Split(',');
DataTable dt = new DataTable();
DataRow row;
foreach (string dc in value)
{
dt.Columns.Add(new DataColumn(dc));
}
while (!sr.EndOfStream)
{
value = sr.ReadLine().Split(',');
if (value.Length == dt.Columns.Count)
{
row = dt.NewRow();
row.ItemArray = value;
dt.Rows.Add(row);
}
}
SqlBulkCopy bc = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.TableLock);
bc.DestinationTableName = "Species";
bc.BatchSize = dt.Rows.Count;
con.Open();
bc.WriteToServer(dt);
bc.Close();
con.Close();
}
当我单击某个按钮并将其连接到我的数据库并恢复 Species 表中的所有行时,此代码正在工作,它工作正常。
这是我的问题:当我在这个表中有值时,它会返回一个错误,因为主键已经被占用。我想要做的是当一些主键已经被使用时,它会使用 csv 文件中的新值更新这一行,如果没有使用主键,那么它会像原始代码一样(只需添加行),我应该在哪里编写代码来检查该行是否已经存在?