2010-07-04 106 views
2

我想用MySql和Mono填充存储过程的结果的数据集。如何使用MySql和Mono从存储过程填充数据集

存储过程需要一些值,在表中创建一个新行,然后选择一些行。

当我尝试这个我得到一个空的数据集,我的数据库没有任何新的记录。 我已经检查了基本知识:

  • 数据库正在运行,我可以连接。
  • 存储过程名称和参数名称正确。
  • 参数类型正确。
  • 存储过程从sql命令行正常工作。

如果我不使用存储过程并将command.commandtext设置为某个sql,它将返回一个包含数据的数据集。

这里是一个代码片断,显示了我正在尝试做什么。

ConnectionStringSettings connectionStringSettings = ConfigurationManager.ConnectionStrings [this.provider]; 
DbProviderFactory factory = DbProviderFactories.GetFactory (connectionStringSettings.ProviderName); 

using(DbConnection connection = factory.CreateConnection()) 
{ 
    connection.ConnectionString = connectionStringSettings.ConnectionString; 
    connection.Open(); 

    using(DbCommand command = connection.CreateCommand()) { 
     command.CommandText = "createUser"; 
     command.CommandType = CommandType.StoredProcedure; 

     dbParameter dbParameter = factory.CreateParameter(); 
     dbParameter.ParameterName = "@name"; 
     dbParameter.Value = "Fred.Smith"; 
     command.Parameters.Add(dbParameter); 

     DataSet dataset = new DataSet(); 
     DbDataAdapter adaptor = factory.CreateDataAdapter(); 
     adaptor.SelectCommand = command; 
     adaptor.Fill(dataset); 

     //This is all ways empty 
     return dataset; 
    } 
} 
+0

您是否使用MS.NET编码?你可以用MySqlParameter试试吗? – yojimbo87 2010-07-07 15:39:10

回答

0

为什么不从SQL语句调用存储过程:

伪代码:我不是一个单声道的人。

query.SQLText = " CALL CreateUser('Fred Smith'); "; 
query.Open; 

如果存储过程返回一个结果集,它应该工作一样一个SELECT

请注意,并非所有框架都支持返回结果集的存储过程。 和MySQL确实支持SELECT CALL Createuser('Fred Smith');

另外,您可以更改存储的过程,以便它把结果集到一个临时表。
然后在单独的选择中从该表中选择。

相关问题