C#Linq实体框架-通过修改Excel单元格值更新数据库
我正在尝试编写一个程序,用户可以从数据库中检索数据,对其进行更改和更新。 我使用实体框架从数据库(SQL Server)获取数据的代码如下:C#Linq实体框架-通过修改Excel单元格值更新数据库,c#,sql-server,excel,entity-framework,vsto,C#,Sql Server,Excel,Entity Framework,Vsto,我正在尝试编写一个程序,用户可以从数据库中检索数据,对其进行更改和更新。 我使用实体框架从数据库(SQL Server)获取数据的代码如下: using (context = new ClientModel()) { var query = from c in context.ClientInfo select c; int i = 1; fo
using (context = new ClientModel())
{
var query =
from c in context.ClientInfo
select c;
int i = 1;
foreach (var c in query)
{
ws.Cells[i, 1].Value = c.Name;
ws.Cells[i, 2].Value = c.LastName;
ws.Cells[i, 4].Value = c.City;
ws.Cells[i, 5].Value = c.Country;
i++;
}
}
输出是这样的:
但是,当我试图根据单元格值的变化更新数据库时,遇到了麻烦。如果用户决定将例如“country2”更改为“country999”,我如何更新数据库
我找到的解决方案是更新用户从数据库检索到的整个表。代码如下:
private void btnUpdate_Click(object sender, EventArgs e)
{
using (context = new ClientModel())
{
int i = 1;
do
{
var tableClient = context.Client.Find(i);
ws.Cells[i, 1].Value = tableClient.Name;
ws.Cells[i, 2].Value = tableClient.LastName;
ws.Cells[i, 3].Value = tableClient.City
ws.Cells[i, 4].Value = tableClient.Coutry
context.SaveChanges();
i++;
} while (ws.Cells[i, 1].Value == null);
}
}
但是,上面的代码没有更新数据库。您应该切换
ws.Cells
和tableClient
。您要做的是再次填充Excel,而不是以其他方式:
tableClient.Name = ws.Cells[i, 1].Value;
tableClient.LastName = ws.Cells[i, 2].Value;
tableClient.City = ws.Cells[i, 3].Value;
tableClient.Coutry = ws.Cells[i, 4].Value;
您还应该更改
while
条件,以查找ws.Cells[i,1].Value=null
您应该切换ws.Cells
和tableClient
。您要做的是再次填充Excel,而不是以其他方式:
tableClient.Name = ws.Cells[i, 1].Value;
tableClient.LastName = ws.Cells[i, 2].Value;
tableClient.City = ws.Cells[i, 3].Value;
tableClient.Coutry = ws.Cells[i, 4].Value;
您还应该更改
while
条件,以查找ws.Cells[i,1].Value=空
除了Caldazar的答案之外,您可能还需要告诉EF您为它所做的更改,以便使用context.Entry(tableClient).State=EntityState.Modified代码>就在SaveChanges()之前。
不,我没有。但是,在根据Caldazar所说的更改代码后,它现在开始运行。除了Caldazar的回答之外,您可能需要告诉EF您为它所做的更改,以便使用context.Entry(tableClient).State=EntityState.Modified代码>就在SaveChanges()之前。
不,我没有。然而,根据卡尔达扎的话修改代码后,它现在成功了。此外,我还必须修改“var tableClient=context.Client.Find(I);”,我假设usar将始终使用主键获取数据:1,2,3,4。。。。现在它正在运行代码。很高兴听到这个消息。如果您在答案中打上标记,我们将不胜感激:)它奏效了。此外,我还必须修改“var tableClient=context.Client.Find(I);”,我假设usar将始终使用主键获取数据:1,2,3,4。。。。现在它正在运行代码。很高兴听到这个消息。如果您将标记为答案,将不胜感激:)