Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;“过程”的参数数量不正确;mysql和vb.net异常_Mysql_Vb.net_Stored Procedures_Datagridview - Fatal编程技术网

&引用;“过程”的参数数量不正确;mysql和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

几天来,我一直在努力让存储过程在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.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()
。我更新了问题以反映这一点