C#获取存储过程返回值和输出参数值的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#获取存储过程返回值和输出参数值的方法相关的知识,希望对你有一定的参考价值。

//转自网络,先留个底

1.获取Return返回值

//存储过程
//Create PROCEDURE mysql
//     @a int,
//     @b int
//AS
//     return @a + @b
//GO
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcedure;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 10;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
MyCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@return"].Value.ToString());

 

2.获取Output输出参数值

//存储过程
//Create PROCEDURE MYSQL
//     @a int,
//     @b int,
//     @c int output
//AS
//     Set @c = @a + @b
//GO
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcedure;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@c", SqlDbType.Int));
MyCommand.Parameters["@c"].Direction = ParameterDirection.Output;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@c"].Value.ToString());

C#接收存储过程返回值:

     public static int User_Add(User us)
     {
         int iRet;
         SqlConnection conn = new SqlConnection(Conn_Str);
         SqlCommand cmd = new SqlCommand("User_Add", conn);
         cmd.CommandType = CommandType.StoredProcedure;
         cmd.Parameters.AddWithValue("@UName", us.UName);
         cmd.Parameters.AddWithValue("@UPass", us.UPass);
         cmd.Parameters.AddWithValue("@PassQuestion", us.PassQuestion);
         cmd.Parameters.AddWithValue("@PassKey", us.PassKey);
         cmd.Parameters.AddWithValue("@Email", us.Email);
         cmd.Parameters.AddWithValue("@RName", us.RName);
         cmd.Parameters.AddWithValue("@Area", us.Area);
         cmd.Parameters.AddWithValue("@Address", us.Address);
         cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);
         cmd.Parameters.AddWithValue("@Phone", us.Phone);
         cmd.Parameters.AddWithValue("@QQ", us.QQ);
         cmd.Parameters.Add("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;       
         try
         {
             conn.Open();
             cmd.ExecuteNonQuery();
             iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;
         }
         catch (SqlException ex)
         {
             throw ex;
         }
         finally
         {
             conn.Close();
         }
         return iRet;
     }

C#接收存储过程输出参数:

    public static decimal Cart_UserAmount(int UID)
    {
        decimal iRet;
        SqlConnection conn = new SqlConnection(Conn_Str);
        SqlCommand cmd = new SqlCommand("Cart_UserAmount", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@UID", UID);
        cmd.Parameters.Add("@Amount", SqlDbType.Decimal).Direction=ParameterDirection.Output;
        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
            iRet = (decimal)cmd.Parameters["@Amount"].Value;
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        finally
        {
            conn.Close();
        }
        return iRet;
    }

C# 中调用 MySQL 存储过程并传递参数和获取返回值

CallableStatement PreparedFunc = MyConnect.prepareCall("{ ? = call isodd( ? ) }");
PreparedFunc.registerOutParameter(1, Types.INTEGER);

PreparedFunc.setInt(1, aNumber);
PreparedFunc.execute();

if (PreparedFunc.getInt(1) == 1)
    System.out.println(aNumber +"is odd");
else
    System.out.println(aNumber +"is even");

C#操作Mysql数据库的存储过程

//MySql过程
//CREATE PROCEDURE JugePasswordCorrect(in username VARCHAR(64), in pwd VARCHAR(32))
//BEGIN
//SELECT COUNT(*) FROM acctable WHERE account=username AND password=pwd;
//END;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;

namespace TestMysql2
{
    class Program
    {
        static void Main(string[] args)
        {
            MySqlConnection conn = new MySqlConnection("Database=test;Data Source=localhost;User Id=‘test‘;Password=‘test‘;pooling=true;Minimum Pool Size=5;Maximum Pool Size=10;CharSet=utf8;port=3306;Connect Timeout=3600");
            conn.Open();

            MySqlCommand cmd = new MySqlCommand("JugePasswordCorrect", conn);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add("?username", MySqlDbType.VarChar, 64);
            cmd.Parameters["?username"].Value = "test";
            cmd.Parameters.Add("?pwd", MySqlDbType.VarChar, 32);
            cmd.Parameters["?pwd"].Value = "test";
            int rows = Convert.ToInt32(cmd.ExecuteScalar());
            if (rows > 0)
            {
                // 密码正确
            }
            conn.Close();
        }
    }
}

其他写法:

    myco = new MySqlConnection(strconn);
    myco.Open();
    mycomm = new MySqlCommand("GetRecordCount", myco);
    mycomm.CommandType = CommandType.StoredProcedure;

    MySqlParameter[] para = new MySqlParameter[]{
        new MySqlParameter("@tbName",MySqlDbType.VarChar,20),
        new MySqlParameter("@strWhere",MySqlDbType.VarChar,500)};

    para[0].Value = "uinfo";
    para[1].Value = strWhere;
    mycomm.Parameters.AddRange(para);
    MySqlDataReader mydr=mycomm.ExecuteReader();
    while(mydr.Read()){
        pageCount = System.Convert.ToInt32(mydr["countStr"].ToString()) ;
        pageCountMod = pageCount % pageSize;
        pageCount= pageCount/ pageSize;
        if (pageCount == 0)
        {
            //pageCount++;
        }
        else
        {
            if (pageCountMod != 0)
            {
                pageCount++;
            }
        }
        pageCountLab.Text = pageCount.ToString();
    }

/*其他:

参数有@开头的,也有?开头的.
MySqlDataAdapter.fill 返回集

 

以上是关于C#获取存储过程返回值和输出参数值的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在Spring中调用存储过程来读取返回值和输出参数?

Asp.net(C#) 获取 执行sql server 语句/存储过程后的 多个返回值?

在 C# 中使用存储过程输出参数

Postgres 存储函数可以同时具有返回值和输出参数吗?

C#使用输出变量调用存储过程时出错,未提供参数

从存储过程中获取返回值