0

我有一个网站,其中包含一个充满设置的表单,其中每个输入都将一个值保存在 MS SQL 数据库中。

但是,当我将字段设置为 '' 时,我收到以下错误消息: “传入的表格数据流 (TDS) 远程过程调用 (RPC) 协议流不正确。参数 3 (""):数据类型 0x00 未知。”

我的 node.js 服务调用了一个如下所示的存储过程:

CREATE PROCEDURE [dbo].[ckd_Configurations_Update]
@Key NVARCHAR(256),
@Value NVARCHAR(MAX)
AS
BEGIN
  UPDATE [dbo].[ckd_Configurations] SET [Value]=@Value WHERE [Key]=@Key;
END

我的桌子:

CREATE TABLE [dbo].[ckd_Configurations]
(
    [Key] NVARCHAR(256) NOT NULL PRIMARY KEY,
    [Value] NVARCHAR(MAX)
)

最后是我的 node.js 路由来设置配置:

router.post('/configurations/update', function (req, res) {
    var request = new sql.Request(databaseConnection);
    var configuration = req.body;
    request.input('Key', sql.NVarChar(256), configuration.Key);
    request.input('Value', sql.NVarChar(sql.MAX), configuration.Value);

    request.execute('ckd_Configurations_Update', function (error, recordsets) {
        if (error) {
            res.json(new apiResponse(false, error.message));
        } else {
            res.json(new apiResponse(true, '', recordsets[0]));
        }
    });
});
4

2 回答 2

1

只需将 mssql 更新到 2.0。该问题已在此版本中修复。

于 2015-02-18T22:55:24.367 回答
0

如果我正确理解您的问题,您希望能够在数据库中插入空字符串吗?

ALLOW 'NULL' 在表中对值列。这样就可以为它设置空值。在存储过程中,放置一个条件:

IF @Value = ''
BEGIN
    SET @Value = NULL
END

当您想将值作为空字符串返回时,您可以在 SELECT 语句中使用它。

Select isnull(Value, '') as Value from [ckd_Configurations]

将该字段的虚拟值设置为“-1”,然后在存储过程中检查该值并将其设置为 NULL。我认为这里的问题是您的服务不接受导致问题的空字符串。在存储过程中,还可以设置

@Value NVARCHAR(MAX) = NULL
于 2015-02-18T07:50:19.210 回答