C# 恢复备份时如何更新?
我正在使用c#在.net中构建一个Web应用程序。 我上传备份文件(csv文件)的代码有问题 代码如下:C# 恢复备份时如何更新?,c#,.net,sql-server,C#,.net,Sql Server,我正在使用c#在.net中构建一个Web应用程序。 我上传备份文件(csv文件)的代码有问题 代码如下: protected void UploadBackup(object sender, EventArgs e) { SqlConnection con = new SqlConnection(dataset1.ConnStr); string filepath = ""+Server.MapPath("/backups/Species.
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();
}
当我点击某个按钮,它连接到我的数据库并恢复物种表中的所有行时,这段代码就可以正常工作了
这是我的问题:
当我在这个表中有值时,它将返回一个错误,因为主键已经被使用了。
我想做的是,当一些主键已经被取下时,它将用csv文件中的新值更新此行,如果主键没有被取下,它将像原始代码一样(只需添加行),我应该在哪里编写代码来检查行是否已经存在 我建议您创建一个
存储过程
以更新
(如果存在)和插入
(如果不存在)。虽然我认为这种方法不适用于SqlBulkCopy
,但您必须逐个插入行。将记录插入临时表,然后发出merge sql命令将数据合并到现有表中
请参阅以获取示例