2017-04-22 42 views
0

我需要创建Web表单应用程序,它将数据从SOAP服务返回的数据集中插入到sql server 2014数据库表中。我用下面的代码:web表单从肥皂服务返回的数据集中插入数据到sql server表中

 DataSet ds; 

     string conStr = ConfigurationManager.ConnectionStrings["myDb"].ConnectionString; 
     SqlConnection conn = new SqlConnection(conStr); 
     SqlDataAdapter adapter = new SqlDataAdapter("select * from catalog", conn); 
     SqlCommand insertCommand = new SqlCommand(); 
     insertCommand.CommandText = "insert into catalog(artId, ardDesc) values(@aid, @desc)"; 
     insertCommand.Connection = conn; 
     insertCommand.Parameters.Add("@aid", SqlDbType.Int); 
     insertCommand.Parameters.Add("@desc", SqlDbType.NVarChar); 

     adapter.InsertCommand = insertCommand; 

     servProxy.prodService author = new servProxy.prodService(); 
     System.Security.Cryptography.X509Certificates.X509Certificate cert = new System.Security.Cryptography.X509Certificates.X509Certificate(@"D:\locCert\certName.p12", "1234"); 
     if (cert != null) 
     { 
      author.ClientCertificates.Add(cert); 
      try 
      { 
       ds = author.GetProdList(); 

       conn.Open(); 
       cmdBuilder = new SqlCommandBuilder(adapter); 
       adapter.Update(ds.Tables[0]); 
      } 
      catch (Exception ex) 
      { 
       // handle error 
      } 
      finally 
      { 
       conn.Close(); 
      } 
     } 
     else 
     { 
      // handle ... 
     } 

当我运行的代码没有任何反应,我犯过错误的地方,但不知道在哪里。当插入断点时可以看到数据集表已成功填充,但插入到数据库中却没有成功。 我可以只将数据插入到两列中,数据集中有15列吗?数据集和db表中的列名是相同的。

回答

1

DataAdapter.Update方法只适合RowState property设置为DataRowState.Added行适用INSERT命令。
很可能,您的服务返回一个DataSet,其表的行状态等于DataRowState.Unchanged

你别无选择,但环比表格中的行,并呼吁,为每一个,DataRow.SetAdded

try 
{ 
    ds = author.GetProdList(); 
    foreach(DataRow row in ds.Tables[0].Rows) 
     row.SetAdded(); 

    conn.Open(); 
    cmdBuilder = new SqlCommandBuilder(adapter); 
    adapter.Update(ds.Tables[0]); 
} 

考虑也该更新方法,通过行更新执行行,这与大的行集,可能会非常缓慢。在这种情况下,最好将插入文本块连接在一起并用分号(批量更新)分隔,当然还需要块所需的所有参数。

+0

谢谢史蒂夫。我尝试过但没有成功。我需要在DS表格和数据库表格上使用相同的名称吗?如何找到DS表的名称,SOAP服务不是我的,我无法控制它? – dragy

+0

我现在看到。问题出在select语句中,当我把'SqlDataAdapter adapter = new SqlDataAdapter(“select * from [myDb]。[dbo]。[catalog]”,conn);'这是成功的。所以,'row.SetAdded();'解决了我的问题 – dragy