我花了大约7个小时试图通过反复试验找出答案。我看到的所有在线示例都不起作用,或者不适用,或者仅显示Im所寻找内容的一半。
这是我要的内容:1.一个使用一个IN参数和一个OUT参数的MYSQL中简单存储过程的示例。2.使用C#从Visual
Studio调用FUNCTIONING(确实很重要,导致在线示例有时无法工作…)的示例。文本调用或存储过程命令类型都可以。3.不推荐使用AddWithValue。4.我很想看看out参数实际起作用。
如果使用MYSQL和Visual Studio无法做到这一点,那么也很高兴知道。
对于此特定示例,MYSQL文档不够详尽。而且,没有Visual Studio或C#的仇恨。
提前致谢!:)
编辑:
到目前为止,这是我设法做到的,并且不起作用!!!
MYSQL方面,使用HeidiSQL:
CREATE DEFINER=`root`@`localhost` PROCEDURE `login`(IN `stuff` VARCHAR(50), IN `pass` VARCHAR(50), OUT `param3` INT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
set param3 = 0;
set param3 = (select count(*) from users where username=stuff and userpassword=pass);
select @param3;
END
在C#端,我尝试获取此OUT参数。现在,这是经过多次迭代之后的,这里我将函数的原样保留下来,并将其归结为两个问题:1.
OUT参数不起作用,以及2.即使Visual Studio传递了IN参数,SQL仍拒绝认识他们。
protected void Login_Authenticate(object sender, AuthenticateEventArgs e)
{
using (MySqlConnection con = new MySqlConnection(strcon))
{
con.Open();
MySqlCommand com = new MySqlCommand("CALL login(@stuff, @pass, @param3);", con);
com.CommandType = CommandType.Text;
com.Parameters.Add("@stuff", MySqlDbType.VarChar);
com.Parameters["@stuff"].Value = Login.UserName;
com.Parameters.Add("@pass", MySqlDbType.VarChar);
com.Parameters["@pass"].Value = Login.Password;
try
{
obj = com.ExecuteScalar();
objparam = com.Parameters["param3"].Value;
if (Convert.ToInt32(obj) != 0)
{
Response.Redirect("Welcome.aspx");
}
else
{
Login.PasswordRequiredErrorMessage = "invalid user name and password";
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
con.Close();
}
}
您应该设置对参数的引用
var param3 = new MySqlParameter();
param3.Direction = ParameterDirection.Output;
param3.DbType = // whatever the dbtype for int is or whatever you need.
param3.ParameterName = "param3";
com.Parameters.Add(param3);
在您的try块中,插入
var result = com.ExecuteReader(); // or com.ExecuteScalar();
执行完该操作之后,您的参数应已填充值,并且还应该能够读取SP结果(选择)。
var paramResult = param3.Value;
可以以读取器或标量读取SP的结果。
// execute reader
while (result.Read()) {
int value = result.GetInt32(0));
} /* read returned values in result */
// execute scalar
int value;
if (int.TryParse($"{result}", out value)) {
/* do something with value */
}
/ ********** /
这个街区应该可以让您到达需要去的地方
const string strcon = "whatevs";
using (MySqlConnection con = new MySqlConnection(strcon))
{
const string sql = "login";
MySqlCommand com = new MySqlCommand(sql, con);
com.CommandType = CommandType.StoredProcedure;
var stuffParam = new MySqlParameter("stuff", stuffValue);
var passParam = new MySqlParameter("pass", passValue);
var param3Param = new MySqlParameter();
param3Param.ParameterName = "param3";
param3Param.DbType = DbType.Int32;
param3Param.Direction = ParameterDirection.Output;
com.Parameters.Add(stuffParam);
com.Parameters.Add(passParam);
com.Parameters.Add(param3Param);
try
{
var scalarResult = com.ExecuteScalar();
// because you used select @param3 in your sp.
int value;
if (int.TryParse($"{scalarResult}", out value))
{
//do something with value
}
//// because you used select @param3 in your sp.
//var readerResult = com.ExecuteReader();
//if (readerResult.Read())
//{
// //
// value = readerResult.GetInt32(0);
//}
int param3Returned;
if(int.TryParse($"{param3Param.Value}", out param3Returned))
{
// do something with param3Returned
}
}
catch (Exception ex)
{
// do something with ex
}
}
本文向大家介绍Node.js中调用mysql存储过程示例,包括了Node.js中调用mysql存储过程示例的使用技巧和注意事项,需要的朋友参考一下 例子仅在windows下测试通过,没有放在linux下测试。如有问题,可以电邮给我~ 1、安装node.js、mysql,此处略(自行搜索吧)…; 2、创建一个名为test的数据库,然后建一张名为user_info的表(仅供测试)… 这里假定mysql
本文向大家介绍C#中调用MySQL存储过程的方法,包括了C#中调用MySQL存储过程的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#中调用MySQL存储过程的方法。分享给大家供大家参考。具体如下: 这段代码演示在 C# 程序中调用 MySQL 的存储过程,没有返回值,没有参数传递。 希望本文所述对大家的C#程序设计有所帮助。
本文向大家介绍PHP使用PDO调用mssql存储过程的方法示例,包括了PHP使用PDO调用mssql存储过程的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP使用PDO调用mssql存储过程的方法。分享给大家供大家参考,具体如下: 数据库中已创建存储过程user_logon_check, PHP调用示例如下, 更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pd
本文向大家介绍Python使用cx_Oracle调用Oracle存储过程的方法示例,包括了Python使用cx_Oracle调用Oracle存储过程的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端
本文向大家介绍sqlserver中存储过程的递归调用示例,包括了sqlserver中存储过程的递归调用示例的使用技巧和注意事项,需要的朋友参考一下 递归式指代码片段调用自身的情况;危险之处在于:如果调用了自身一次,那么如何防止他反复地调用自身。也就是说提供递归检验来保证适当的时候可以跳出。 以阶层为例子说存储过程中递归的调用。 递归 当创建此存储过程时候,会遇见一条报告信息
问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。