【问题标题】:Zero should not save in the table零不应该保存在表中
【发布时间】:2012-02-05 22:47:30
【问题描述】:

弹性网格

在保存 flexgrid 空单元格值时,在表格中保存为 0

举例

弹性网格

ID Value1 Value2

001 1 
002 
....

正在保存...

查询

With flexgrid

 insert into table1 values (NULLIF('" & .TextMatrix(i, 0) & "', '0'), NULLIF('" & .TextMatrix(i, 1) & "', '0'), NULLIF('" & .TextMatrix(i, 2) & "', '0'))

End with

表1

ID Value1 Value2

001 1 0
002 0 0 

它不应该允许在表中保存'0'值,它应该保存为空列。

预期输出

ID 值1 值2

001 1 
002   

如何解决问题。

需要帮助

【问题讨论】:

    标签: sql sql-server vb6 sql-server-2000


    【解决方案1】:

    假设您的列是 int,您发送的空字符串是 implicitly converted to zero when stored。所以你的 NULLIF 需要测试空字符串。在处理完 NULLIF 之后会出现零。

    另外:不要连接字符串来构建 SQL 语句。避免 SQL 注入的参数

    【讨论】:

      【解决方案2】:

      这可能在服务器端处理得更好,例如

      CREATE PROCEDURE AddThing
      @ID INTEGER, 
      @Value1 INTEGER = NULL,
      @Value2 INTEGER = NULL
      AS
      INSERT INTO table1 VALUES (@ID, NULLIF(@Value1, 0), NULLIF(@Value2, 0));
      

      然后使用带有强类型参数对象的 Command 对象从 VB 调用 proc,

      【讨论】:

        猜你喜欢
        • 2013-04-13
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        • 2019-03-23
        相关资源
        最近更新 更多