2010-07-12 7 views

Répondre

1

http://forums.asp.net/p/988462/1278686.aspx

MySqlCommand cmd = new MySqlCommand("DeleteMessage", new MySqlConnection(GetConnectionString())); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add(new MySqlParameter("param1", MessageItem.Entry_ID)); 
    cmd.Connection.Open(); 
    int i = cmd.ExecuteNonQuery(); 
    cmd.Connection.Close(); 
+0

@ratty: dans 'I' que vous avez. – Svisstack

6

Il est presque identique à la façon dont vous appelleriez un serveur SQL procédure stockée:

using(MySqlConnection conn = new MySqlConnection(connString)) 
{ 
    MySqlCommand command = new MySqlCommand("spSomeProcedure;", conn); 
    command.CommandType = System.Data.CommandType.StoredProcedure; 

    // Add your parameters here if you need them 
    command.Parameters.Add(new MySqlParameter("someParam", someParamValue)); 

    conn.Open(); 

    int result = (int)command.ExecuteScalar(); 
} 
0

Stored routines

fonctions et procédures stockées stockées sont appelés de différentes façons.

La fonction stockée est utilisée comme fonction normale dans l'instruction SQL. Par exemple

SELECT id, title, my_function(price) FROM table 

Les procédures stockées sont appelées à l'aide instruction CALL.

CALL my_procedure(1,2,'title'); 

Je ne sais pas C#, donc probablement vous pouvez utiliser la classe MySqlCommand pour appeler des procédures stockées, mais vous ne pouvez pas l'utiliser pour appeler des fonctions stockées.

0

En fait, je ne pouvais pas obtenir les autres méthodes suggérées pour retourner une valeur. J'ai fini par créer une chaîne pour appeler la fonction, puis exécuté cette chaîne avec .ExecuteScalar:

MySqlTransaction mySqlTransaction = testDataMySqlConnection.BeginTransaction(); 

mySqlCommand = new MySqlCommand 
    { 
    Connection = testDataMySqlConnection, 
    CommandText = "SELECT sf_UnitsAttempted('" + ... + ");", 
    CommandType = CommandType.Text 
    }; 

var f = (float)mySqlCommand.ExecuteScalar(); 
mySqlCommand.Dispose(); 
return f; 
0

Je sais que la question est de retour d'une fonction stockée, et la réponse de Justin couvre ici que. Je voulais ajouter que si vous vouliez retourner un DataTable à partir d'une procédure stockée au lieu, vous pouvez le faire en utilisant un DataAdapter:

// using MySql.Data.MySqlClient; // remember to include this 

/* Helper method that takes in a Dictionary list of parameters, 
    and returns a DataTable. 
    The connection string is fetched from a resources file. */ 
public static DataTable ExecuteProc(string procedureName, Dictionary<string,object> parameterList) 
{ 
    DataTable outputDataTable; 

    using (MySqlConnection MySqlConnection = new MySqlConnection(Resources.SQL_CONNECTION_STRING)) 
    { 
     using (MySqlCommand sqlCommand = new MySqlCommand(procedureName, MySqlConnection)) 
     { 
      sqlCommand.CommandType = CommandType.StoredProcedure; 

      if (parameterList != null) 
      { 
       foreach(string key in parameterList.Keys) 
       { 
        string parameterName = key; 
        object parameterValue = parameterList[key]; 

        sqlCommand.Parameters.Add(new MySqlParameter(parameterName, parameterValue)); 
       } 
      } 

      MySqlDataAdapter sqlDataAdapter = new MySqlDataAdapter(sqlCommand); 
      DataSet outputDataSet = new DataSet(); 
      sqlDataAdapter.Fill(outputDataSet, "resultset"); 

      outputDataTable = outputDataSet.Tables["resultset"]; 
     } 
    } 

    return outputDataTable; 
} 
Questions connexes