&引用;“过程”的参数数量不正确;mysql和vb.net异常
几天来,我一直在努力让存储过程在vb.net中工作,但我似乎无法让它工作 如果有人能帮我,我会非常感激的。我一直在努力解决这个问题,但就是找不到解决办法&引用;“过程”的参数数量不正确;mysql和vb.net异常,mysql,vb.net,stored-procedures,datagridview,Mysql,Vb.net,Stored Procedures,Datagridview,几天来,我一直在努力让存储过程在vb.net中工作,但我似乎无法让它工作 如果有人能帮我,我会非常感激的。我一直在努力解决这个问题,但就是找不到解决办法 Private子getID() Dim ds作为新数据集 Dim con_str=“” Dim con As MySql.Data.MySqlClient.MySqlConnection=New MySql.Data.MySqlClient.MySqlConnection(con_str) con.Open() Dim cmd为MySql.Da
Private子getID()
Dim ds作为新数据集
Dim con_str=“”
Dim con As MySql.Data.MySqlClient.MySqlConnection=New MySql.Data.MySqlClient.MySqlConnection(con_str)
con.Open()
Dim cmd为MySql.Data.MySqlClient.MySqlCommand=New MySql.Data.MySqlClient.MySqlCommand
cmd.CommandType=CommandType.storedProcess
cmd.CommandText=“getID()”
cmd.CommandType=CommandType.storedProcess
cmd.Parameters.AddWithValue(“@id”,“113”)
Dim da为MySql.Data.MySqlClient.MySqlDataAdapter=New MySql.Data.MySqlClient.MySqlDataAdapter(cmd)
Dim dt作为新数据表
da.SelectCommand.Connection=con
da.填充(dt)
端接头
当我尝试运行此程序时,在da.Fill(dt)行出现异常“过程otrs.getID的参数数量不正确;预期为1,实际为0”。我真的不知道为什么会这样。我的存储过程中没有声明任何参数
我的存储过程应该很好。从dbms中调用它效果很好,但代码如下:
分隔符$$
CREATE DEFINER=`otrs`@`%`过程`getCIs`()
开始
挑选
l、 源密钥作为基本密钥id,
c1.将项目编号配置为基本编号,
v、 名称作为基本名称,
l、 目标密钥作为链接id,
c2.将项目编号配置为链接编号,
v1.name作为链接名称,
t、 名称为链接类型
从…起
otrs.link_关系为l
内连接
otrs.configitem为c1
在l.source_key=c1.id上
内连接
otrs.configitem为c2
在l.target_key=c2.id上
内连接
otrs.link_类型为t
内连接
otrs.configitem_版本为v
在l.source\u key=v.configitem\u id上
内连接
otrs.configitem_版本为v1
在l.target_key=v1.configitem_id;
结束$$
是的,我确实使用了搜索功能,我在谷歌上搜索了很多,但我仍然很感激能得到关于我问题的任何信息
所以我发现我错了。显然,您不需要在过程名称后加上()。但我不是100%确定,因为现在什么都没有发生:
Private子getID()
Dim ds作为新数据集
Dim con_str=“”
Dim con As MySql.Data.MySqlClient.MySqlConnection=New MySql.Data.MySqlClient.MySqlConnection(con_str)
con.Open()
Dim cmd为MySql.Data.MySqlClient.MySqlCommand=New MySql.Data.MySqlClient.MySqlCommand
cmd.CommandType=CommandType.storedProcess
尝试
cmd.CommandText=“getID”
特例
MsgBox(例如Message())
结束尝试
cmd.Parameters.AddWithValue(“@id”,113)
cmd.Connection=con
Dim da为MySql.Data.MySqlClient.MySqlDataAdapter=New MySql.Data.MySqlClient.MySqlDataAdapter(cmd)
Dim dt作为新数据表
尝试
da.填充(dt)
特例
MsgBox(例如Message())
结束尝试
端接头
这一行是错误的,它创建了一个命令文本为“call getID()”的新命令,并将其添加到适配器中,但没有参数
Dim da As MySql.Data.MySqlClient.MySqlDataAdapter = _
New MySql.Data.MySqlClient.MySqlDataAdapter("call getID()", con_str)
你想要
cmd.CommandText = "getID"
Dim da As MySql.Data.MySqlClient.MySqlDataAdapter = _
New MySql.Data.MySqlClient.MySqlDataAdapter(cmd, con_str)
这一行是错误的,它创建了一个命令文本为“call getID()”的新命令,并将其添加到适配器中,但没有参数
Dim da As MySql.Data.MySqlClient.MySqlDataAdapter = _
New MySql.Data.MySqlClient.MySqlDataAdapter("call getID()", con_str)
你想要
cmd.CommandText = "getID"
Dim da As MySql.Data.MySqlClient.MySqlDataAdapter = _
New MySql.Data.MySqlClient.MySqlDataAdapter(cmd, con_str)
您从未实际执行cmd。此外,正如前面提到的,proc调用不需要括号。应该是这样的
MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter("getID", con);
DataSet DS = new DataSet();
mySqlDataAdapter.Fill(DS);
您从未实际执行cmd。此外,正如前面提到的,proc调用不需要括号。应该是这样的
MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter("getID", con);
DataSet DS = new DataSet();
mySqlDataAdapter.Fill(DS);
谢谢你的快速回答。我这样做了,但现在我得到了另一个例外:“在数据库“
otrs
”中找不到过程或函数“getID()
”。这很奇怪,因为过程肯定在数据库中。刚刚更改了代码:)经过研究,我发现这个异常主要与小写和大写有关,但是db名称在连接字符串和db中都是小写。当命令类型为CommandType.StoredProcedure
时,只需要使用名称getid
,而不是call getid()
。我更新了问题以反映这一点谢谢你的快速回答。我这样做了,但现在我得到了另一个例外:“在数据库“otrs
”中找不到过程或函数“getID()
”。这很奇怪,因为过程肯定在数据库中。刚刚更改了代码:)经过研究,我发现这个异常主要与小写和大写有关,但是db名称在连接字符串和db中都是小写。当命令类型为CommandType.StoredProcedure
时,只需要使用名称getid
,而不是call getid()
。我更新了问题以反映这一点