2010-07-04 66 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');

另外,您可以更改存儲的過程,以便它把結果集到一個臨時表。
然後在單獨的選擇中從該表中選擇。

相關問題