如何从Web API获取参数,以便我可以在SQL查询中使用它们

时间:2015-01-09 19:05:45

标签: asp.net-web-api

所以我使用本指南设置了一个使用SQL的WebAPI: http://www.codeproject.com/Articles/715073/Creating-a-Proof-of-Concept-Web-API-App-that-Uses

一切都很好,但是我注意到这只是从SQL中取回所有记录并执行" Where"而在C#中,这对于数百万行的数据库来说并不理想。

我认为应该有效的快速解决方案是在这里捕获参数:

    public IEnumerable<ConfigMgrServerDB> GetByStateOrProvince(string StateOrProvince)
    {
        Debug.WriteLine(StateOrProvince);
        APIparam = StateOrProvince;
        return customerAddressData;
    }

但是,即使我在类的范围内定义APIparam,当我尝试在调用SQL的方法中使用它时,它显然没有值,发送到SQL的参数设置为&#39; default&#39;像这样: @ PARAM =默认 下面是完整的代码,它显示APIparam被定义为一个公共字符串,并且可以设置它并且回显正常。但是,当我想在SQL代码中使用它时,它就是null。

        using System;
        using System.Collections.Generic;
        using System.Data;
        using System.Data.SqlClient;
        using System.Diagnostics;
        using System.Linq;
        using System.Web;

        namespace WebApplication4.Models
        {
            public class ConfigMgrServerDBRepository : IConfigMgrServerDBRepository
            {
                private readonly List<ConfigMgrServerDB> customerAddressData = new List<ConfigMgrServerDB>();

                public string APIparam ;
                public string strProgramName;

                public int GetCount()
                {
                    return customerAddressData.Count;
                }

                public IEnumerable<ConfigMgrServerDB> GetByStateOrProvince(string StateOrProvince)
                {
                    Debug.WriteLine(StateOrProvince);
                    APIparam  = StateOrProvince;
                    return customerAddressData;
                }

                public IEnumerable<ConfigMgrServerDB> GetAll()
                {
                    return customerAddressData;
                }

                public ConfigMgrServerDB Add(ConfigMgrServerDB item)
                {
                    if (item == null)
                    {
                        throw new ArgumentNullException("item arg was null");
                    }
                    if (customerAddressData != null) customerAddressData.Add(item);
                    return item;
                }

                public ConfigMgrServerDBRepository()
                {
                    using (var conn = new SqlConnection(
                        @"Data Source=RE8-PRIMB\PRIMB;Initial Catalog=PrimB;Persist Security Info=True;User ID=sa;Password=pass;"))
                        //@"Data Source=RE8-NWMMC1\NWMMC1;Initial Catalog=AdventureWorksLT2012;Persist Security Info=True;User ID=sa;Password=pass;"))
                    {
                        using (var cmd = conn.CreateCommand())
                        {
                            cmd.CommandText =
        @"CREATE TABLE #Package
        (
            PackageID NVARCHAR(8),
            Name NVARCHAR(512),
            ProgramName NVARCHAR(100),
            CollectionID NVARCHAR(8),
        )
        CREATE CLUSTERED INDEX IDX_C_Package_CollectionID ON #Package(CollectionID)

        INSERT INTO #Package
        SELECT Pa.[PackageID],Pa.[Name],MAX(Pro.Name)ProgramName, A.CollectionID
        FROM v_Package (nolock) Pa
        INNER JOIN vSMS_Program (nolock) Pro ON Pro.PkgID = Pa.PackageID AND (ProgramFlags&0x00001000)/0x00001000 <> 1
        INNER JOIN v_Advertisement (nolock) A ON A.PackageID = Pa.PackageID AND A.ProgramName = Pro.Name
        WHERE Pa.PackageType = 0 AND Pro.Name <> '*' /*AND Pro.Name NOT LIKE '%Nomad%'*/
        GROUP BY Pa.PackageID,Pa.Manufacturer,Pa.[Name],Pa.[Description], A.CollectionID

        SELECT p.PackageID, p.ProgramName/*, p.Name, cm.Name MachineName,s.Hardware_ID0,mac.MAC_Addresses0*/
        FROM #Package p
        INNER JOIN CollectionMembers (nolock) cm ON cm.SiteID = p.CollectionID
        INNER JOIN v_R_System_Valid (nolock) s ON s.ResourceID = cm.MachineID
        INNER JOIN v_RA_System_MACAddresses (nolock) mac ON mac.ResourceID = s.ResourceID
        WHERE cm.Name = @PackageID
        OR mac.MAC_Addresses0 = '78:2B:CB:9B:56:F3'
        GROUP BY p.PackageID,p.Name, p.ProgramName";

                            cmd.CommandType = CommandType.Text;
                            //cmd.Parameters.AddWithValue("@PackageID", APIparam );
                            cmd.Parameters.AddWithValue("@PackageID", "RE8-W7-1");
                            Debug.WriteLine(APIparam);

                            cmd.Connection.Open();
                            using (SqlDataReader dataReader = cmd.ExecuteReader())
                            {
                                while (dataReader != null && dataReader.Read())
                                {
                                    int i = 0;
                                    while (dataReader.Read())
                                    {
                                        i++;
                                        APIparam  = Convert.ToString(dataReader["PackageId"]);
                                        strProgramName = Convert.ToString(dataReader["ProgramName"]);
                                        Add(new ConfigMgrServerDB { PackageId = APIparam , ProgramName = strProgramName });

                                    }
                                    if (i == 0) /* No Rows */
                                    {
                                        //collectionMessage = "Cannot add Machine to collection  " + CMCollectionID + " because no CM resource found with this serial number" + System.Environment.NewLine;
                                        Debug.WriteLine("no rows ");
                                    }                         

                                }
                            }
                        }
                    }
                }
            }
        }

0 个答案:

没有答案