以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  SQL command 如何参数化 表达式  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=171121)

--  作者:qq252476275
--  发布时间:2021/8/18 17:09:00
--  SQL command 如何参数化 表达式
使用sqlCommand, 
如何 cmd.Parameters.Add(@金额, \'0.9 * 字段1 - 字段2\')


0.9 * 字段1 - 字段2 这是动态写入的, 实际会当做字符串写, 本身 金额是float, 所以写不成功。


--  作者:有点蓝
--  发布时间:2021/8/18 17:23:00
--  
不支持的,只能使用拼sql的方式
--  作者:qq252476275
--  发布时间:2021/8/18 17:27:00
--  
问题是公式是变化动态的
--  作者:qq252476275
--  发布时间:2021/8/18 17:29:00
--  

公式不是固定不变,可以用sql语句拼接


是动态的,根据客户端传来的数据,组合的


sql 拼接 , 如何 不加 单引号呢?

如以下:sql 语句
Up date xzgsTechTray Set [制作工时] = \'0.09*数量*单重\',[安装工时] = \'形规1/1000*7.5*数量\',[修改者] = \'admin\',[修改时间] = \'2021-08-18 17:10:50\' where [_identify] = 172


--  作者:有点蓝
--  发布时间:2021/8/18 17:32:00
--  
l列名本来就不需要使用单引号呀,字符串才需要

Up date xzgsTechTray Set [制作工时] = 0.09*数量*单重,

--  作者:qq252476275
--  发布时间:2021/8/18 17:38:00
--  
是的, =后面的字符串是从客户端传过来的, 这个值是变化的, 可能是 0.09*数量*单重, 也可能是  形规1/1000*7.5*数量, 也可能是其他

在后台拼接时,因为是字符串,所以加了单引号, 就不正确了 

或者使用 

declare  @sql  来拼接?
exec @sql 

--  作者:有点蓝
--  发布时间:2021/8/19 8:36:00
--  
dim s as string = "0.09*数量*单重"

dim sql as string = "Up date xzgsTechTray Set [制作工时] = " & s & ",[安装工时] ="

--  作者:qq252476275
--  发布时间:2021/8/19 8:43:00
--  
理解了, 谢谢!

\' 判断是否是表达式
                            \' output.show( "jpName:" & jp.name.ToString )                            
                            Dim bExpression As Boolean = False
                            If strFieldType <> "" Then
                                For Each xx As JProperty In arrFieldType(i)
                                    \'output.show( "xxName:" & xx.name.ToString )
                                    
                                    If jp.name.ToString = xx.name.ToString Then
                                        \'output.show("xxValue:" & xx.value.ToString)
                                        If xx.value.ToString = "expression" Then
                                            bExpression = True
                                        End If
                                        Exit For
                                    End If
                                Next
                            End If
                            \'output.show(bExpression )
                            If bExpression Then   \' 是表达式,则无单引号
                                strValue = strValue & "[" & jp.name.ToString & "] = " & jp.value.ToString.Replace("\'","\'\'") & ","                                
                            Else   \' 不是,则为字符串, 有单引号
                                strValue = strValue & "[" & jp.name.ToString & "] = \'" & jp.value.ToString.Replace("\'","\'\'") & "\',"
                            End If