2010-01-06 52 views
1

我使用:如何使用MysqlConnector調用mysql函數?

MySqlCommand comHash = new MySqlCommand("MY_FUNCTION", con); 
comHash.CommandType = CommandType.StoredProcedure; // ?? 
comHash.Parameters.AddWithValue("my_parameter", "value1"); 
comHash.???? 

我需要從函數返回值。

回答

1

這是你在找什麼?

static void CallProc() 
{ 
//Establish connection 
MySqlConnection myConn = new MySqlConnection("user id=root;database=demobase;host=localhost"); 
myConn.Open(); 
//Set up myCommand to reference stored procedure 'myfunc' 
MySqlCommand myCommand = new MySqlCommand("myfunc", myConn); 
myCommand.CommandType = System.Data.CommandType.StoredProcedure; 

//Create input parameter and assign a value 
MySqlParameter myInParam = new MySqlParameter(); 
myInParam.Value = "Mark"; 
myCommand.Parameters.Add(myInParam); 
myInParam.Direction = System.Data.ParameterDirection.Input; 

//Create placeholder for return value 
MySqlParameter myRetParam = new MySqlParameter(); 
myRetParam.Direction = System.Data.ParameterDirection.ReturnValue; 
myCommand.Parameters.Add(myRetParam); 

//Execute the function. ReturnValue parameter receives result of the stored function 
myCommand.ExecuteNonQuery(); 
Console.WriteLine(myRetParam.Value.ToString()); 
myConn.Close(); 
} 

使用的功能是:

CREATE FUNCTION demobase.myfunc(uname CHAR(20)) 
RETURNS CHAR(60) 
RETURN CONCAT(uname,' works with server ',@@version); 

來自實例here

+0

它不工作。錯誤:密鑰不能爲空。參數名稱:鍵。 – Zanoni 2010-01-06 13:43:22

+0

您是否將所有參數發送到您的功能? – Canastro 2010-01-06 15:56:18

-2

提取看起來你可以使用:

dataAdapter = New MySqlDataAdapter(myCommand, myConn); 
data = new datatable(); 
dataAdapter.Fill(data); 
1

我最近用同樣的問題所困擾。這是我找到的解決方案。

MySqlCommand comHash = new MySqlCommand("SELECT MY_FUNCTION (?my_parameter)", con); 
comHash.CommandType = CommandType.Text; 
comHash.Parameters.AddWithValue("my_parameter", "value1"); 
0

試試這個:

// 
MySqlCommand myCommand = new MySqlCommand(); 
myCommand.CommandType = System.Data.CommandType.StoredProcedure; 
myCommand.CommandText = "FNC_IsUserInSite"; 

MySqlParameter rv = new MySqlParameter(); 
rv.Direction = System.Data.ParameterDirection.ReturnValue; 
rv.MySqlDbType = MySqlDbType.Int32; 
rv.ParameterName = "@retval"; 
myCommand.Parameters.Add(rv); 

myCommand.Connection = connection; 
// 

myCommand.ExecuteScalar(); 
object ret = myCommand.Parameters["@retval"].Value; 

if (ret != null) 
{ 
    if ((int)ret > 0) 
    { 
     ... 
    } 
}