如何在web服务调用中引用数据表列

本文关键字:引用 数据表 调用 服务 web | 更新日期: 2023-09-27 18:22:20

首先,我对.net或web服务调用不太了解。因此,如果这个问题以前已经得到回答,我深表歉意。

我有下面的一段代码,它在SSIS中由执行SQL任务填充的数据集上进行迭代。我需要获取这些值并将它们发送到web服务,以便web服务可以随心所欲。我已经转到了可以迭代记录的部分,但我不确定如何引用web服务调用中的列。也就是说,如果服务调用是xyz(val1,val2,val3,val4),我如何将val值与我创建的数据表相关联?

        public void Main()
        {
            // TODO: Add your code here
            var caseObj = Dts.Variables["User::QCase"].Value;
            var serviceURI = Dts.Variables["User::WebServiceURI"].Value.ToString();
            var oleDA = new OleDbDataAdapter();
            var httpBinding = new BasicHttpBinding();
            var dt = new DataTable();
            string sMsg;
            oleDA.Fill(dt, Dts.Variables["User::QCases"].Value);
            foreach (DataRow row in dt.Rows)
                foreach (DataColumn col in dt.Columns)
                {
                    var caseProxy = new CaseService.CServicesProxyClient(httpBinding, new EndpointAddress(serviceURI));
                    sMsg = "";
                    sMsg = sMsg + col.ColumnName + ": " + (col.Ordinal).ToString() + vbCrLf;
                    MessageBox.Show(sMsg);
                    var results = caseProxy.SaveCaseStatusChange(dt, 0, false, null); //This is the service call which will push the values to the web service. dt is the data table.
                }
          /*  if (results)
            {
                Dts.TaskResult = (int)ScriptResults.Success;
            }
            else
            {
                Dts.TaskResult = (int)ScriptResults.Failure;
            }*/
        }
        #region ScriptResults declaration
        /// <summary>
        /// This enum provides a convenient shorthand within the scope of this class for setting the
        /// result of the script.
        /// 
        /// This code was generated automatically.
        /// </summary>
        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
        #endregion

        public object vbCrLf { get; set; }
    }
}

我希望我已经提供了足够的细节,但如果没有,我将非常乐意提供。谢谢你花时间阅读问题。

如何在web服务调用中引用数据表列

除非我遗漏了一些细微之处,否则这是非常直接的。你唯一需要记住的是,数组中的第一个元素将位于的零位

您当前的方法,遍历Columns集合,可能对允许通用数据集的东西很有用,但我假设User::QCases中的数据总是返回N列数据。深度,我不在乎,宽度我在乎。

您需要查看您的webservice方法,以了解它所期望的数据类型,并将行中的数据强制转换为该类型。此外,您还需要处理NULL(或者不处理,根据您的数据),但.NET基元类型不允许NULL值。你可以使用"作弊"吗?类型,但这使得这是一个比我可以释放类型更长的响应。

foreach (DataRow row in dt.Rows)
{
    // row is going to contain the current row worth of data
    // All you need to do is access the values.
    var results = caseProxy.SaveCaseStatusChange(row[0].ToString(), row[1].ToString(), row[2].ToString(), row[3].ToString());
}

有一些机制可以按名称而不是按列的序号位置对列进行寻址,这将允许您始终访问Id列,无论它是第一列还是最后一列。

如何';foreach';使用C#的DataTable中的列?