如果检索到的日期小于当前日期,我想停用button6,我已经使用了下面的代码,但它不起作用。请帮我找错。
protected void Button6_Click1(object sender, EventArgs e)
{
MySqlConnection connection = new MySqlConnection("server=localhost; database=e-learningsystem; uid=root; password=123;port=3307;");
connection.Open();
try
{
MySqlCommand cmd = new MySqlCommand("SELECT Date FROM fundamentals of is WHERE ChapNo=Chapter 1", connection);
string date = Convert.ToString(cmd.ExecuteScalar());
//date = cmd;
if (Convert.ToDateTime(cmd).CompareTo(System.DateTime.Now) < 0)
{
DownLoadFileFromServer("~/NewFolder1/" + "Fundamentals of IS.pdf");
}
else
{
Button6.Enabled = false;
}
}
catch (Exception ex)
{
// file IO errors
}
}
这是serverMapPath
代码
public static string ServerMapPath(string path)
{
return HttpContext.Current.Server.MapPath(path);
}
public static HttpResponse GetHttpResponse()
{
return HttpContext.Current.Response;
}
public static void DownLoadFileFromServer(string fileName)
{
//This is used to get Project Location.
try
{
string filePath = ServerMapPath(fileName);
//This is used to get the current response.
HttpResponse res = GetHttpResponse();
res.Clear();
res.AppendHeader("content-disposition", "attachment; filename=" + filePath);
res.ContentType = "application/octet-stream";
res.WriteFile(filePath);
res.Flush();
res.End();
}
catch (Exception ex)
{
}
}
答案 0 :(得分:1)
MSDN答案:
我认为这会对你有所帮助
int result = DateTime.Compare(date1, date2);
string relationship;
if (result < 0)
relationship = "is earlier than";
else if (result == 0)
relationship = "is the same time as";
else
relationship = "is later than";
答案 1 :(得分:0)
MySqlCommand cmd = new MySqlCommand("SELECT Date FROM fundamentals of is WHERE ChapNo=Chapter 1", connection);
string date = Convert.ToString(cmd.ExecuteScalar());
//date = cmd;
if (Convert.ToDateTime(cmd).CompareTo(System.DateTime.Now) < 0)
您确定要Convert.ToDateTime(cmd)
吗?
您不想Convert.ToDateTime(date)
吗?
答案 2 :(得分:0)
以下行可能会出现逻辑错误,因为您要将cmd
变量转换为DateTime
而不是您的命令返回的date
:
if (Convert.ToDateTime(cmd).CompareTo(System.DateTime.Now) < 0)
使用它可能会解决您的问题:
if (Convert.ToDateTime(date).CompareTo(System.DateTime.Now) < 0)
答案 3 :(得分:0)
如果要在检索的日期小于当前日期时停用按钮,则应该反转if语句条件,并使用date
字符串而不是cmd
:
if (Convert.ToDateTime(cmd).CompareTo(System.DateTime.Now) < 0)
到
if (Convert.ToDateTime(date).CompareTo(System.DateTime.Now) >= 0)
如果日期高于或等于当前日期,您可以将文件下载到服务器,如果日期小于当前日期,则禁用该按钮。
或者只是颠倒整个if:
if (Convert.ToDateTime(date).CompareTo(System.DateTime.Now) < 0)
{
Button6.Enabled = false;
}
else
{
DownLoadFileFromServer("~/NewFolder1/" + "Fundamentals of IS.pdf");
}
答案 4 :(得分:0)
您可能想转换date
:
if (Convert.ToDateTime(date).CompareTo(System.DateTime.Now) < 0)
每次点击该行都会抛出异常。
答案 5 :(得分:0)
一个选项是在javascript中禁用它(在点击事件中) 另一种选择是在Page_Onload中编写相同的代码(并检查ISPostback)
答案 6 :(得分:0)
嗯,除了每个人提到if (Convert.ToDateTime(cmd).CompareTo(System.DateTime.Now) < 0) //need to use date instead of cmd
的明显问题之外,代码还包含一个使用过于通用的catch
块的反模式。
代码正在捕获异常来处理IO异常。但是,如果还有其他类型的例外呢?我开始怀疑由于某种原因,Convert.ToDateTime
抛出了一个错误,这个错误被catch语句吞没,你认为它只能捕获 IO异常。事实上,它会捕获任何类型的异常,包括可能通过调用FormatException
引发的Convert.ToDateTime
。
但接下来我会解释它可能是SqlException
:
此行中也存在无效的SQL:
MySqlCommand cmd =
new MySqlCommand("SELECT Date FROM fundamentals of is WHERE ChapNo=Chapter 1",
connection);
我认为应该是:
MySqlCommand cmd =
new MySqlCommand("Select Date from fundamentals where ChapNo='Chapter 1'",
connection); //that is, if ChapNo is a STRING/TEXT!
执行此命令将抛出由于您的catch语句而无法检测到的错误。您需要使catch语句尽可能具体。
答案 7 :(得分:0)
你有Button6.Enabled = false;
在try catch中throw an Exception
。尝试将其复制到您的方法之上,如下所示,以查看它是否正常工作:
protected void Button6_Click1(object sender, EventArgs e)
{
Button6.Enabled = false;
MySqlConnection connection = new MySqlConnection("server=localhost; ..
..
}
如果有效,那么在try catch中的语句中找到错误。
同样双击你的aspx code
。也许您正在引用一个名为Button6_Click
的方法,而不是发布的Button6_Click1
(可能是Button6_Click的副本)