0

我有 azure 移动服务数据库。我正在尝试将数据放入其中,在服务器端添加位置字段。我正在使用的源代码如下。问题是服务器以“内部服务器错误”响应,我的客户端抛出“MobileServiceInvalidOperationException”,但添加了数据。如果我将 request.execute() 添加到成功函数而不是 request.respond() 它工作正常,但在表中添加了我不想要的额外行。如何将数据放入数据库而不会出现“内部服务器错误”?

 function insert(item, user, request) { 
        var queryString = "INSERT INTO mytable (name, city, country, latitude, longitude, location) VALUES (?, ?, ?, ?, ?, geography::STPointFromText('POINT(' + ? + ' ' + ? + ')', 4326))";         
        mssql.query(queryString, [item.name, item.city, item.country, item.latitude, item.longitude, item.longitude.toString(), item.latitude.toString()], { 
                    success: function() {                     
                        request.respond(); 
                    }

              }); 
    }
4

2 回答 2

0

将您的呼叫移至您的 queryString 之外的 STPointFromText()。例如,

 function insert(item, user, request) { 
        var location = geography::STPointFromText ....
        var queryString = "INSERT INTO mytable (name, city, country, latitude, longitude, location) VALUES (?, ?, ?, ?, ?, ?)";         
        mssql.query(queryString, [item.name, item.city, item.country, item.latitude, item.longitude, location], { 
                    success: function() {                     
                        request.respond(); 
                    }

              }); 
    }

如果这没有帮助,请查看日志以获取有关该错误的其他信息。

于 2013-08-19T17:35:52.380 回答
0

问题是,当您InsertAsync在客户端使用时,它期望您插入的项目和数据库中的新 ID 得到响应。因此,您必须更新行并对此做出适当的回应:

request.respond(statusCodes.CREATED, item);

在 InsertAsync 之后的客户端,您的项目中有 Id:

await actionTable.InsertAsync(action);
var id = item.Id;
于 2013-09-09T19:21:42.267 回答