我尝试使用edge.js从Node.js应用程序向SQL Server写入数据。有问题的数据具有一定的可变性,因此某些属性通常是不确定的。这些是可选值,并且在数据库中表示为例如,例如referrer (nvarchar(255), null)
。
处理数据时,我将其映射到预定义的模型类,并将undefined
属性显式设置为null
。这可确保存在查询所需的所有参数。但是,当我运行查询时,edge.js错误抱怨没有提供参数。如果我将null
值更改为空字符串,则可行,但这显然不可取。示例代码......
var edge = require('edge');
// entity to save
var Visit = function Visit(obj) {
obj = obj || {};
this.eventtype = 'Visit';
this.visitguid = obj.visitguid;
this.url = obj.url || null;
this.useragent = obj.useragent || null;
this.referrer = obj.referrer || null;
this.created = obj.created || null;
return this;
}
var insertVisit = edge.func('sql', function () {/*
INSERT INTO Visits (guid, url, useragent, referrer, created)
VALUES
(@visitguid
,@url
,@useragent
,@referrer
,CONVERT(DATETIME, @created, 103))
*/});
var visit = new Visit({
visitguid: 'f47ac10b-58cc-4372-a567-0e02b2c3d479',
url: 'www.a-website.com/page/',
useragent: 'Googlebot',
created: '13/06/2014 12:41.000'
});
insertVisit(visit, function (err, result) { /* callback code here */ });
抛出的错误是
error: System.AggregateException: One or more errors occurred. --->
System.Data.SqlClient.SqlException: The parameterized query '(@eventtype nvarchar(28),@visitguid nvarchar(36),@url nvarchar(3' expects the parameter '@referrer', which was not supplied.
我认为这是edge.js中的问题/限制。例如,在C#中,您可以将null
参数设置为DBNull.Value
而不是null
直接向上,但是在JavaScript中没有明显或记录的方法来实现此目的。有没有办法让这项工作?
(当然,我可以使用edge来编写一些C#代码来进行数据库写入,但是这会更复杂一些,所以如果可能的话,我更喜欢像上面那样做。 )
任何提示将不胜感激。 感谢
答案 0 :(得分:0)
现在修复了edge-sql v0.1.2(除了基本的CRUD操作之外,它还增加了对调用存储过程的支持)。