Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用asp.net读取从没有参数的存储过程返回的日期?_C#_Sql_Asp.net - Fatal编程技术网

C# 如何使用asp.net读取从没有参数的存储过程返回的日期?

C# 如何使用asp.net读取从没有参数的存储过程返回的日期?,c#,sql,asp.net,C#,Sql,Asp.net,这是我的存储过程代码。我得到了正确的日期,但无法读取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

这是我的存储过程代码。我得到了正确的日期,但无法读取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
但它不起作用。它抛出一个异常

不存在数据时读取的尝试无效


我必须做哪些更改?

除了为什么返回本地时间时使用
GETDATE
字符外,如果不将光标移动到数据读取器的第一行,则无法读取数据读取器

来自文件

SqlDataReader
的默认位置在第一条记录之前。 因此,必须调用
Read
,才能开始访问任何数据

或者更好,使用,因为您返回一行一列,如下所示

string s;
reader = cmd.ExecuteReader();
if(reader.Read())
   s = reader.GetString(0);
记住,
CONVERT(VARCHAR(10),GETDATE(),101)
返回CLR端带有
string
VARCHAR
,这就是为什么不能将此值分配给
DateTime
变量的原因


还可以使用
using
语句来处理数据库连接和命令。

尝试类似的操作,使用
ExecuteScalar
获取单行/单列值:

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

您应该考虑在SP中使用输出参数。正如您所说,我已经修改了查询,但它也不起作用。ExecuteScalar不能用于返回日期时间。错误1无法在DataAccessLayer中将类型“string”隐式转换为“System.DateTime”。这是我使用时的例外。非常感谢。我已经编辑过这样的代码,object result=cmd.ExecuteScalar();dt=转换到当前时间(结果);返回dt;
string s = (string)cmd.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;
    }
}