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