Web服务从不同的连接表返回不同的列作为字段(输出)

时间:2013-05-09 19:53:16

标签: c# infopath-2007

我正在尝试创建一个简单的Web服务,它基本上接受输入参数A,然后根据该参数返回不同表中的结果(来自带有几个表连接的查询)字段,如何捕获该输出以在规则中使用它同时用一个infopath表单字段绑定它?请尽快帮助......

我的代码如下......这里我们将它们作为字符串,但希望它们作为不同的字段...

public class Data
{
    //Create new method to get data from ** database
    public static List<string> GetData(string ORDNUM_10)
      //public struct GetData(string ORDNUM_10)      
    {
        string PMDES1_01 = "";
        string DESCRPTN_104 = "";
        string PRTNUM_10 = "";
        string ORDREF_10 = "";
        string TNXDTE_01 = "";
        //Create connection
        SqlConnection con = new SqlConnection(@"Data Source=*****;Initial Catalog=EEE;Integrated Security=true;");

        //SQL Command
        SqlCommand cmd = new SqlCommand("SELECT DISTINCT Account_Types.DESCRPTN_104, Part_Master.PMDES1_01,Order_Master.PRTNUM_10,Order_Master.ORDNUM_10,Order_Master.ORDRef_10,Part_Master.TNXDTE_01 FROM.............. (EUM_10 = '"+ ORDNUM_10 + "'", con); 

        //Open connection
        con.Open();
        //to read from SQL Server
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            PMDES1_01 = dr["PMDES1_01"].ToString();
            PRTNUM_10 = dr["PRTNUM_10"].ToString();
            DESCRPTN_104 = dr["DESCRPTN_104"].ToString();                
            ORDREF_10 = dr["ORDREF_10"].ToString();
            TNXDTE_01 = dr["TNXDTE_01"].ToString();            
        }

        //close connections
        dr.Close();
        con.Close();

        return new List<string> { PMDES1_01, PRTNUM_10, DESCRPTN_104, ORDEF_10 };
    }
}   

如何将此字符串作为字段,以便我可以在infopath表单字段中使用它们?

1 个答案:

答案 0 :(得分:0)

在Visual Studio中,单击File菜单,然后单击New并选择Project。然后在ASP.NET Empty Web Application中找到Web。给它一个合理的名称然后点击OK。在解决方案资源管理器中,右键单击解决方案下的新项目,单击Add并选择New Item并在Web Service中找到Web。将其命名为Data.asmx,然后点击Add。然后,您应该看到新Web服务Data类背后的代码。

现在,您可以声明自己的类来表示数据库记录,例如请参阅下面的class Record。然后,通过调用Record上的Get * Type *()方法,在GetData()方法中创建SqlDataReader的实例。您需要查看数据库列上的数据类型并调用适当的方法,例如GetString()GetInt32()等......

class Data : System.Web.Services.WebService
{
    public class Record
    {
        public string AccountType { get; set; }
        public string PartDescription { get; set; }
        public int PartNumber { get; set; }
        public string OrderRef { get; set; }
        public DateTime TransactionDate { get; set; }
    }

    [WebMethod]
    public static List<Record> GetData(string param)    
    {
        SqlConnection con = new SqlConnection(@"ConnectionString");
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT type,desc,num,ref,date FROM foo", con);
        SqlDataReader dr = cmd.ExecuteReader();

        List<Record> records = new List<Record>();

        while (dr.Read())
        {
            records.Add(new Record() {
                AccountType = dr.GetString(0),
                PartDescription = dr.GetString(1),
                PartNumber = dr.GetInt32(2),
                OrderRef = dr.GetString(3),
                TransactionDate = dr.GetDateTime(4)                
            });
        }

        dr.Close();
        con.Close();
        return records;
    }
}

提示:最好通过cmd.Parameters集合向查询添加参数,而不是使用字符串连接。

现在,您应该能够运行或部署Web服务并获取其WSDL的URL。有关从InfoPath调用的示例,有一个很好的walk-through here