用c#调用mysql存储过程出错.提示如下:
“检测到 PInvokeStackImbalance
Message: 对 PInvoke 函数“MySQLDriverCS!MySQLDriverCS.CPrototypes::mysql_real_escape_string”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。”
C#调用代码如下:
MySQLConnectionString str= new MySQLConnectionString("localhost", "abc", "root", "root");
MySQLConnection conn = new MySQLConnection(str.AsString); conn.Open(); MySQLCommand comm = new MySQLCommand();
comm.Connection = conn;
comm.CommandText = "pro_Insert";//存储过程名称
comm.CommandType = CommandType.StoredProcedure; MySQLParameter par1 = new MySQLParameter("?sUserName", "a");
comm.Parameters.Add(par1); MySQLParameter par2 = new MySQLParameter("?sUserPass", "a");
comm.Parameters.Add(par2); MySQLParameter par3 = new MySQLParameter("?iID", 0);
par3.Direction = ParameterDirection.Output;
comm.Parameters.Add(par3);
int rev=comm.ExecuteNonQuery(); int id = Convert.ToInt32(par3.Value); MessageBox.Show(id.ToString());
存储过程代码如下:
CREATE PROCEDURE `pro_Insert`(
in sUserName varchar(45),
in sUserPass varchar(45),
out iID int)
BEGIN
insert into `abc`.`t1` (
UserName,
UserPass)
values(
sUserName,
sUserPass);
set iID=@@IDENTITY;
select iID;
END代码只是实现了简单的数据插入,并返回新数据的ID(自动编号),在MYSQL下直接调用存储过程没有问题,但代码中会保持。
另:使用MySQLDriverCS.dll
“检测到 PInvokeStackImbalance
Message: 对 PInvoke 函数“MySQLDriverCS!MySQLDriverCS.CPrototypes::mysql_real_escape_string”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。”
C#调用代码如下:
MySQLConnectionString str= new MySQLConnectionString("localhost", "abc", "root", "root");
MySQLConnection conn = new MySQLConnection(str.AsString); conn.Open(); MySQLCommand comm = new MySQLCommand();
comm.Connection = conn;
comm.CommandText = "pro_Insert";//存储过程名称
comm.CommandType = CommandType.StoredProcedure; MySQLParameter par1 = new MySQLParameter("?sUserName", "a");
comm.Parameters.Add(par1); MySQLParameter par2 = new MySQLParameter("?sUserPass", "a");
comm.Parameters.Add(par2); MySQLParameter par3 = new MySQLParameter("?iID", 0);
par3.Direction = ParameterDirection.Output;
comm.Parameters.Add(par3);
int rev=comm.ExecuteNonQuery(); int id = Convert.ToInt32(par3.Value); MessageBox.Show(id.ToString());
存储过程代码如下:
CREATE PROCEDURE `pro_Insert`(
in sUserName varchar(45),
in sUserPass varchar(45),
out iID int)
BEGIN
insert into `abc`.`t1` (
UserName,
UserPass)
values(
sUserName,
sUserPass);
set iID=@@IDENTITY;
select iID;
END代码只是实现了简单的数据插入,并返回新数据的ID(自动编号),在MYSQL下直接调用存储过程没有问题,但代码中会保持。
另:使用MySQLDriverCS.dll
解决方案 »
- 新人求助将c#datagridview数据导入microsoft excel 12.0中
- 关于堆和栈,懂得进,谢谢
- 工作流可以实现跨系统吗?
- Winform中重启系统和关闭系统程序怎么实现
- 各位师兄帮忙哈!!!~~速度哈!~~~~~
- OCIEnvCreate returned -1 错误提示
- 各位高手,请介绍一些关于.net2.0,VS2005,SQL SERVER2005方面的新书
- vs.net2003调试c#.net出现问题请指教
- C#的函数默认参数是什么?
- Process.Start在窗体应用程序中好使,但在服务中就无效果。
- 初学者问题:请补全代码,关于如何把数据放入datagridview
- 关于DataGridView中添加DataGridViewComboBoxColumn 列时候出现的问题?
看看能解决不?
Message: 对 PInvoke 函数“MySQLDriverCS!MySQLDriverCS.CPrototypes::mysql_real_escape_string”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。”
这种错误没遇见过,不过个人建议不用MySQLDriverCS.dll
只用MySql.Data.dll看有没有这样的错误。因为:原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配---这句话
和
的原因。