簡體   English   中英

如何使用asp.net讀取沒有參數的存儲過程返回的日期?

[英]How to read the date that is return from a stored procedure which have no parameter using asp.net?

ALTER PROCEDURE [dbo].[usp_currentDate]
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT CONVERT(VARCHAR(10), GETDATE(), 101) 
END

這是我的存儲過程代碼。 我得到了正確的日期,但是我無法讀取asp.net中的值。

public DateTime getCurrentDate()
{
    try
    {
        DateTime dt;
        SqlDataReader reader;

        SqlConnection objSqlConn = new SqlConnection(ConnString);

        SqlCommand cmd = new SqlCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "usp_currentDate";
        cmd.Connection = objSqlConn;

        objSqlConn.Open();
        me(1);
        reader = cmd.ExecuteReader();
        dt = reader.GetDateTime(1);  
        return dt;  
    }
    catch (Exception ex)
    {
        throw ex;
    }
} 

但它不起作用。 引發異常

沒有數據時讀取嘗試無效

我必須進行哪些更改?

嘗試使用ExecuteScalar這樣的方法來獲取單行/單列值:

public DateTime getCurrentDate()
{
    try
    {
        DateTime dt;

        // set up connection and command in *using* blocks
        using (SqlConnection objSqlConn = new SqlConnection(ConnString))
        using (SqlCommand cmd = new SqlCommand("dbo.usp_currentDate", objSqlConn))
        {
            cmd.CommandType = CommandType.StoredProcedure;

            objSqlConn.Open();

            // since the query returns exactly one row, one column -> use ExecuteScalar
            object result = cmd.ExecuteScalar();

            // if something was returned .....
            if (result != null)
            {
                // try to convert to DateTime
                if (DateTime.TryParse(result.ToString(), out dt)
                {
                    return dt;
                }
            }

            // return default value, if no data was read or could not be converted 
            return DateTime.MinValue;
        }
    }
    catch (Exception ex)
    {
        throw;
    }
} 

除了說明為什么要使用GETDATE作為字符返回本地時間之外,如果不使用Read方法將光標移到數據的第一行,就無法讀取數據讀取器。

從文件;

SqlDataReader的默認位置在第一條記錄之前。 因此,您必須調用Read才能開始訪問任何數據。

string s;
reader = cmd.ExecuteReader();
if(reader.Read())
   s = reader.GetString(0);

更好的方法是使用ExecuteScalar方法,因為您返回的是一行和一列,例如:

string s = (string)cmd.ExecuteScalar();

記住, CONVERT(VARCHAR(10), GETDATE(), 101)返回varchar ,它最好在CLR端與string一起使用 ,這就是為什么不能將此值分配給DateTime變量的原因。

還可以使用using語句來處理數據庫連接和命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM