幾天我一直在嘗試並試圖讓存儲過程在vb.net中工作,但我似乎無法做到這一點工作。「PROCEDURE的參數數量錯誤」與mysql和vb.net的例外
我真的很感激,如果有人可以幫我在這裏。我一直在努力解決這個問題,但我找不到解決方案。
Private Sub getID()
Dim ds As New DataSet
Dim con_str = "
Dim con As MySql.Data.MySqlClient.MySqlConnection = New MySql.Data.MySqlClient.MySqlConnection(con_str)
con.Open()
Dim cmd As MySql.Data.MySqlClient.MySqlCommand = New MySql.Data.MySqlClient.MySqlCommand
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "getID()"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@id", "113")
Dim da As MySql.Data.MySqlClient.MySqlDataAdapter = New MySql.Data.MySqlClient.MySqlDataAdapter(cmd)
Dim dt As New DataTable
da.SelectCommand.Connection = con
da.Fill(dt)
End Sub
當我試圖運行此我得到的例外「對程序otrs.getID參數數目不正確;預計1,得到0」就行了da.Fill(DT)。我不知道爲什麼會發生這種情況。在我的存儲過程中沒有聲明參數。
我的存儲過程應該沒問題。調用它的數據庫管理系統制定了罰款,但這裏是代碼反正:
delimiter $$
CREATE DEFINER=`otrs`@`%` PROCEDURE `getCIs`()
BEGIN
SELECT
l.source_key AS base_id,
c1.configitem_number AS base_number,
v.name as base_name,
l.target_key AS link_id,
c2.configitem_number AS link_number,
v1.name as link_name,
t.name as link_type
FROM
otrs.link_relation AS l
INNER JOIN
otrs.configitem AS c1
ON l.source_key = c1.id
INNER JOIN
otrs.configitem AS c2
ON l.target_key = c2.id
INNER JOIN
otrs.link_type AS t
INNER JOIN
otrs.configitem_version AS v
ON l.source_key = v.configitem_id
INNER JOIN
otrs.configitem_version AS v1
ON l.target_key = v1.configitem_id;
END$$
是的,我沒有使用搜索功能,我用Google搜索了很多,但我仍然感謝任何一種關於我的問題的信息。
所以我發現是錯的。顯然你不需要程序名後面的()。我不是100%肯定,但因爲現在沒有任何反應都:
Private Sub getID()
Dim ds As New DataSet
Dim con_str = ""
Dim con As MySql.Data.MySqlClient.MySqlConnection = New MySql.Data.MySqlClient.MySqlConnection(con_str)
con.Open()
Dim cmd As MySql.Data.MySqlClient.MySqlCommand = New MySql.Data.MySqlClient.MySqlCommand
cmd.CommandType = CommandType.StoredProcedure
Try
cmd.CommandText = "getID"
Catch ex As Exception
MsgBox(ex.Message())
End Try
cmd.Parameters.AddWithValue("@id", 113)
cmd.Connection = con
Dim da As MySql.Data.MySqlClient.MySqlDataAdapter = New MySql.Data.MySqlClient.MySqlDataAdapter(cmd)
Dim dt As New DataTable
Try
da.Fill(dt)
Catch ex As Exception
MsgBox(ex.Message())
End Try
End Sub
謝謝你的快速回答。我這樣做了,但現在我又遇到了另一個異常:「數據庫'otrs''中找不到」過程或函數'getID()'「。這很奇怪,因爲程序肯定在數據庫中。剛剛改變了代碼:) – OhSnap 2011-12-20 08:03:16
經過研究,我發現這個異常大多與小寫大寫有關,但db-name在連接字符串和db中都是小寫字母。 – OhSnap 2011-12-20 08:39:17
當命令類型爲「CommandType.StoredProcedure」而不是「call getID()'時,只需使用名稱'getid'。我更新了這個問題來反映這一點 – 2011-12-20 15:18:44