Sql 将参数发送到windows 8应用商店应用程序的c#中的windows azure移动服务器脚本

Sql 将参数发送到windows 8应用商店应用程序的c#中的windows azure移动服务器脚本,sql,windows-8,windows-store-apps,azure-mobile-services,Sql,Windows 8,Windows Store Apps,Azure Mobile Services,我在我的Windows Azure移动服务预览表(名为“项”)上修改了“读取”操作,如下所示: Javascript: function read(query, user, request) { var howRead; if(howRead == "unique") { var sqlUnique = "SELECT DISTINCT ? FROM Item WHERE qProjectCode = ?"; mssql.query(sqlUnique) reque

我在我的Windows Azure移动服务预览表(名为“项”)上修改了“读取”操作,如下所示:

Javascript:

function read(query, user, request) 
{

var howRead;

if(howRead == "unique")
{
    var sqlUnique = "SELECT DISTINCT ? FROM Item WHERE qProjectCode = ?";
    mssql.query(sqlUnique)
    request.execute();
}
else if (howRead == "column")
{
    var sqlColumn = "SELECT ? FROM Item WHERE qProjectCode = ?";
    mssql.query(sqlColumn)
    request.execute();
}
else if (howRead == "all")
{
   var sqlAll = "SELECT * FROM Item WHERE qProjectCode = ?";
    mssql.query(sqlAll)
    request.execute();
}

}
当我希望返回一列值、一列中的所有项或所有列的唯一列表时,这仅仅是一种选择,同时将读取限制为具有给定项目代码的记录

现在,它在C#中工作,但扫描整个表(使用其他项目代码),并始终返回所有列。这本身就是低效的

c#

var-client=new-MobileServiceClient(“[https-path]”,“[key]”);
var table=client.GetTable();
var query1=表。其中(w=>w.QProjectCode==qgv.projCode&&w.QRecord==(int)lbRecord.Items[uStartRecordIndex]);
var query1Enum=wait query1.ToEnumerableAsync();
foreach(query1Enum中的变量i)
{
//过程数据
}
我如何修改c#代码来处理Javascript代码?请随意评论一下整体方法,因为我不是一个优秀的程序员,而且总是可以使用建议

谢谢

几件事:

  • 在您的服务器代码中,
    mssql
    调用没有做任何事情(有用)。如果您想得到它们的结果,需要向其传递回调(调用是异步的)
  • 大多数场景都可以在客户端完成。唯一需要服务器代码的场景是带有
    DISTINCT
    修饰符的场景
  • 对于这种情况,您需要将自定义参数传递给服务器脚本。您可以使用
    MobileServiceTableQuery
    对象中的
    WithParameters
    方法来定义要传递给服务的参数
假设此数据类:

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Other { get; set; }
    public string ProjectCode { get; set; }
}
下面的代码只能用于在客户端完成场景2和场景3(服务器端不需要脚本)

Task<IEnumerable<string>> ReadingByColumn(IMobileServiceTable<Item> table, string projectCode)
{
    return table
        .Where(i => i.ProjectCode == projectCode)
        .Select(i => i.Name)
        .ToEnumerableAsync();
}

Task<IEnumerable<Item>> ReadingAll(IMobileServiceTable<Item> table, string projectCode)
{
    return table.Where(i => i.ProjectCode == projectCode).ToEnumerableAsync();
}

Task<IEnumerable<string>> ReadingByColumnUnique(IMobileServiceTable<Item> table, string projectCode)
{
    var dict = new Dictionary<string, string>
    {
        { "howRead", "unique" },
        { "projectCode", projectCode },
        { "column", "Name" },
    };
    return table
        .Select(i => i.Name)
        .WithParameters(dict)
        .ToEnumerableAsync();
}
有几件事:

  • 在您的服务器代码中,
    mssql
    调用没有做任何事情(有用)。如果您想得到它们的结果,需要向其传递回调(调用是异步的)
  • 大多数场景都可以在客户端完成。唯一需要服务器代码的场景是带有
    DISTINCT
    修饰符的场景
  • 对于这种情况,您需要将自定义参数传递给服务器脚本。您可以使用
    MobileServiceTableQuery
    对象中的
    WithParameters
    方法来定义要传递给服务的参数
假设此数据类:

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Other { get; set; }
    public string ProjectCode { get; set; }
}
下面的代码只能用于在客户端完成场景2和场景3(服务器端不需要脚本)

Task<IEnumerable<string>> ReadingByColumn(IMobileServiceTable<Item> table, string projectCode)
{
    return table
        .Where(i => i.ProjectCode == projectCode)
        .Select(i => i.Name)
        .ToEnumerableAsync();
}

Task<IEnumerable<Item>> ReadingAll(IMobileServiceTable<Item> table, string projectCode)
{
    return table.Where(i => i.ProjectCode == projectCode).ToEnumerableAsync();
}

Task<IEnumerable<string>> ReadingByColumnUnique(IMobileServiceTable<Item> table, string projectCode)
{
    var dict = new Dictionary<string, string>
    {
        { "howRead", "unique" },
        { "projectCode", projectCode },
        { "column", "Name" },
    };
    return table
        .Select(i => i.Name)
        .WithParameters(dict)
        .ToEnumerableAsync();
}

哇…太棒了。我按照你的指示做了,ReadingAll和ReadingColumn例程非常有效。!比我最初的方法节省了大量时间。非常感谢。我无法让ReadingByColumn唯一例程工作,它破坏了其他两个例程(如果我将服务器脚本更改为您的代码,那么这三个例程每次都会出现内部服务器错误)。我经常使用它,并且我的猜测是最好的(请记住,我知道的很少)变量切换和/或逻辑是不正确的。可能是完全不同的。有什么后续想法吗?在这一点上调试服务器脚本不是一件很容易的事情。我通常会在脚本中编写一堆
控制台.log
语句来确定错误在哪里。哇……太棒了东西。我按照你的指示,ReadingAll和ReadingColumn例程工作得很好。!比我最初的方法节省了大量时间。所以非常感谢。我无法让ReadingByColumn唯一例程工作,它破坏了其他两个例程(如果我将服务器脚本更改为您的代码,那么这三个例程每次都会出现内部服务器错误)。我经常使用它,并且我的猜测是最好的(请记住,我知道的很少)是因为变量切换和/或逻辑不正确。可能是完全不同的。有什么后续想法吗?在这一点上调试服务器脚本不是一件很容易的事情。我通常会在整个脚本中编写一组
控制台.log
语句,以确定错误所在。