如何在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; }
}
}
我希望我已经提供了足够的细节,但如果没有,我将非常乐意提供。谢谢你花时间阅读问题。
除非我遗漏了一些细微之处,否则这是非常直接的。你唯一需要记住的是,数组中的第一个元素将位于的零位
您当前的方法,遍历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中的列?