gpt4 book ai didi

sql - 使用数据集更新数据源

转载 作者:行者123 更新时间:2023-12-04 16:01:32 24 4
gpt4 key购买 nike

我需要建议。我有asp.net Web服务和winforms客户端应用程序。
客户端调用此Web方法并获取数据集。

   1. [WebMethod]  
2. public DataSet GetSecureDataSet(string id)
3. {
4.
5.
6. SqlConnection conn = null;
7. SqlDataAdapter da = null;
8. DataSet ds;
9. try
10. {
11.
12. string sql = "SELECT * FROM Tab1";
13.
14. string connStr = WebConfigurationManager.ConnectionStrings["Employees"].ConnectionString;
15.
16. conn = new SqlConnection(connStr);
17. conn.Open();
18.
19. da = new SqlDataAdapter(sql, conn);
20.
21. ds = new DataSet();
22. da.Fill(ds, "Tab1");
23.
24. return ds;
25. }
26. catch (Exception ex)
27. {
28. throw ex;
29. }
30. finally
31. {
32. if (conn != null)
33. conn.Close();
34. if (da != null)
35. da.Dispose();
36. }
37. }


完成工作后,他调用此更新Web方法。他可以在数据集中的表中添加,删除和编辑行。

  [WebMethod]
public bool SecureUpdateDataSet(DataSet ds)
{

SqlConnection conn = null;
SqlDataAdapter da = null;
SqlCommand cmd = null;
try
{

DataTable delRows = ds.Tables[0].GetChanges(DataRowState.Deleted);

DataTable addRows = ds.Tables[0].GetChanges(DataRowState.Added);

DataTable editRows = ds.Tables[0].GetChanges(DataRowState.Modified);

string sql = "UPDATE * FROM Tab1";

string connStr = WebConfigurationManager.ConnectionStrings["Employees"].ConnectionString;

conn = new SqlConnection(connStr);
conn.Open();

cmd = new SqlCommand(sql, conn);
da = new SqlDataAdapter(sql, conn);

if (addRows != null)
{
da.Update(addRows);
}

if (delRows != null)
{
da.Update(delRows);
}

if (editRows != null)
{
da.Update(editRows);
}


return true;

}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn != null)
conn.Close();
if (da != null)
da.Dispose();
}
}


客户端代码

   1. //on client side is dataset bind to datagridview   
2. Dataset ds = proxy.GetSecureDataSet("");
3. ds.AcceptChanges();
4.
5. //edit dataset
6.
7.
8. //get changes
9. DataSet editDataset = ds.GetChanges();
10.
11. //call update webmethod
12. proxy.SecureUpdateDataSet(editDataSet)


但它完成此错误:

System.Web.Services.Protocols.SoapException:服务器无法处理请求。 ---> System.InvalidOperationException:当传递带有已修改行的DataRow集合时,更新需要有效的UpdateCommand。
在D:\ Diploma.Work \ WebService \ Service1.asmx.cs:line 489中的WebService.Service.SecureUpdateDataSet(DataSet ds)中

问题是SQL Commad,客户端可以添加,删除和插入行,如何编写corect SQL命令....有什么建议吗?谢谢

最佳答案

试试这个:

[WebMethod]
public bool SecureUpdateDataSet(DataSet delta)
{

string connStr = WebConfigurationManager.ConnectionStrings["Employees"].ConnectionString;

using(var conn = new SqlConnection(connStr))
{
conn.Open();

string sql = "select * from tab1 where 1 = 0";

using(var da = new SqlDataAdapter(sql, conn))
{

var builder = new SqlCommandBuilder(ad);

da.InsertCommand = builder.GetInsertCommand();
da.UpdateCommand = builder.GetUpdateCommand();
da.DeleteCommand = builder.GetDeleteCommand();

da.Update(delta);

return true;
}
}
return false;
}

关于sql - 使用数据集更新数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2529079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com