2017-04-16 35 views
3

我有這個MySQL命令一個問題:如何在未定義值時定義參數值?

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) 

當我嘗試在VB.NET(VS2008)運行出現以下錯誤:

@Qty must be defined so do @tmp

然而,當我在MySQL上運行此(HeidiSQL)它沒有問題。

當我加入到New ConnectionStringAllow User Variables = true錯誤是:

Keyword not supported. Parameter name: allowuservariables

這是我ConnectionString我放在一起使用Connection Strings

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

我使用的MySQL版本5.6.21

+0

我想說的是擺脫查詢中的Set @ qty部分,然後向名爲'@ qty'的'cmdTemp.Parameters'集合中添加一個參數。 –

+0

請幫我解決這個!,即使我已經在使用'cmdTemp.Parameters'它仍然給我和錯誤@ChrisDunaway – Shiroze

+0

你不知道你在做什麼。 「IF」功能中的作業的目的是什麼? –

回答

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

I found this blog , which tells, that with newer versions of .net Connector you have to add

;Allow User Variables=True 

This answer

It's a connection string option - "Allow User Variables=true"

When set to true, parameters are prefixed with '?'.

OP具有confirmed,他們沒有使用?。他們在查詢中繼續使用@

0

我不清楚你想要做什麼。看起來你可以簡化你的查詢,因爲你的if函數總是返回相同的值,無論它們評估爲真還是假。我對MySql不是很熟悉,所以我可能誤解了你正在努力完成的任務。

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

然後只通過@qty作爲參數。

+0

沒有錯,它更新所有的值,不檢查然後更新。 @ChrisDunaway – Shiroze