2015-08-22 70 views
1

返回日期時間我有這個疑問:從存儲過程

CREATE PROCEDURE [dbo].[spGetWhenTaskLastRun] 
    @dt datetime out   
AS 
BEGIN 
    SELECT 
     @dt = whenTaskLastRan 
    FROM 
     [dbo].[t_whenTaskLastRan] 
END 

這個C#代碼來執行這個查詢:

SqlDataReader reader; 

string ConnectionString = SafaConnectionString.ConnectionString; 

SqlConnection Connection = new SqlConnection(ConnectionString); 

SqlCommand cmd = new SqlCommand("spGetWhenTaskLastRun", Connection); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add("@dt", SqlDbType.DateTime); 
cmd.Parameters["@dt"].Direction = ParameterDirection.Output; 

try 
{ 
    Connection.Open(); 
    reader = cmd.ExecuteReader(); 

    if (reader.HasRows) 
     return (DateTime)cmd.Parameters["@dt"].Value; 
    else 
     return DateTime.Now; 
} 

但它總是返回reader.HasRows = false並沒有記錄。

我查詢錯了嗎?

回答

4

存儲過程未返回結果集;它只是分配輸出參數值。改爲使用ExecuteNonQuery方法。如果沒有行限定或列值爲NULL,則輸出參數將爲NULL

cmd.ExecuteNonQuery(); 
if (cmd.Parameters["@dt"].Value == DBNull.Value)  
    return (DateTime)cmd.Parameters["@dt"].Value; 
else 
    return DateTime.Now; 
+0

是的,那是工作,謝謝 –