我正在尝试使用MySql和Mono用存储过程的结果填充数据集。
存储过程接受一些值,在表中创建一个新行,然后选择一些行。
当我尝试这个时,我得到一个空数据集,而我的数据库没有任何新记录。 我检查了基础知识:
如果我不使用存储过程并将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 :(得分:0)
为什么不从SQL语句中调用存储过程:
伪代码:我不是单声道人。
query.SQLText = " CALL CreateUser('Fred Smith'); ";
query.Open;
如果存储过程返回结果集,则它应与SELECT
一样工作。
请注意,并非所有框架都支持返回结果集的存储过程。
MySQL确实不支持SELECT CALL Createuser('Fred Smith');
或者,您可以更改存储过程,以便将结果集放入临时表中 然后在单独的选择中从该表中选择。