如何在未定义值时定义参数值?

时间:2017-04-16 15:46:10

标签: mysql vb.net

我的MySQL命令有问题:

<?php
if( !empty($_POST['url']) )
    exec('/bin/bash /home/d_youtube/youtube.sh "' . $_POST['url'] . '"');
?>

当我尝试在VB.NET(VS2008)中运行时,我收到以下错误:

  必须定义

cmdTemp = New MySqlCommand("SET @qty = " & Qty & "; update(tb_harvest) set actual = (case when @qty >= actual " & _ "then if(@qty := @qty - actual, 0, 0) when (@tmp := actual - @qty) " & _ "then if(@qty := 0, @tmp, @tmp) " & _ "else actual end), Status = (case when @qty >= actual then if(@qty := @qty - actual, 0, 0) " & _ "when (@tmp := actual - @qty) then if(@qty := 0, 1, 1) else 1 end) order by harvestid;", cn) ,以便@Qty

然而,当我在MySQL(HeidiSQL)上运行它时,它没有问题。

当我添加到@tmpNew ConnectionString时,错误是:

  

不支持关键字。参数名称:allowuservariables

这是我使用Connection Strings汇总的Allow User Variables = true

ConnectionString

我正在使用MySQL版本5.6.21

2 个答案:

答案 0 :(得分:2)

Connection Strings确实指定这是一个有效的连接:

Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;AllowUserVariables=True;

注意AllowUserVariables。这是您在连接字符串中设置的方式。然而,这似乎会让你感到悲伤,虽然我无法理解为什么这也是documentation中所说的。也许是特定版本。

但请尝试将其更改为:

;Allow User Variables=True

这就是它在你的连接字符串中的样子:

Server=localhost;Port=3306;Database=testing;Uid='test';Pwd='‌​test';Allow User Varia‌​bles=True;

我做了一些环顾四周,发现了一些其他来源也将其设置为;Allow User Variables=True

This answer

$connectionstring =  "Server=$Server;Port=$port;Database=$DataBase;Uid=$User;Pwd=$Password;allow zero datetime=yes;Allow User Variables=True"

This answer

  

我发现这个blog,告诉我们,对于更新版本的.net连接器,你必须添加

;Allow User Variables=True

This answer

  

它是一个连接字符串选项 - &#34;允许用户变量= true&#34;

     

设置为true时,参数的前缀为&#39;?&#39;。

OP有confirmed,他们不必使用?。他们继续在查询中使用@

答案 1 :(得分:0)

我不清楚你要做什么。您似乎可以简化查询,因为if函数总是返回相同的值,无论它们是否为true或false。我对MySql不太熟悉,所以我可能误解了你想要完成的事情。

update(tb_harvest) 
set actual = if(@qty >= actual, 0, actual - @qty), 
    Status = if(@qty >= actual, 0, 1)
order by harvestid;

然后只需传入@qty作为参数。

相关问题