【问题标题】:Converting varchar to monthDate将 varchar 转换为 monthDate
【发布时间】:2011-06-24 18:23:35
【问题描述】:

我收到此错误消息:将 varchar 值“monthDate”转换为数据类型 int 时转换失败。

我有这个 SQL 语句:

String[][] results = lm.SqlSelect("SELECT COUNT(*) FROM members_ WHERE DATEPART(month, DateUnsub_) = 'monthDate' AND DATEPART(year, DateUnsub_) = 2011 AND DATEDIFF(day, DateJoined_, DateUnsub_) <= 30");

我在这里有一个 int,它的值会根据 dateLookup 值而变化:

switch (dateLookup)
        {
            case "January":
                monthDate = 01;
                break;
            case "February":
                monthDate = 02;
                break;
            case "March":
                monthDate = 03;
                break;
            case "April":
                monthDate = 04;
                break;
            case "May":
                monthDate = 05;
                break;
            case "June":
                monthDate = 06;
                break;
            case "July":
                monthDate = 07;
                break;
            case "August":
                monthDate = 08;
                break;
            case "September":
                monthDate = 09;
                break;
            case "October":
                monthDate = 10;
                break;
            case "November":
                monthDate = 11;
                break;
            case "December":
                monthDate = 12;
                break;
        }

我的问题是 - varchar 来自哪里?例如,当我从 SQL 语句中取出“monthDate”变量并将其替换为数字 05 时,一切正常。

【问题讨论】:

  • 这一切都在.aspx.cs文件中完成!

标签: c# asp.net int varchar


【解决方案1】:

您的查询字符串中的'monthDate' 不是变量。

我觉得应该是

String[][] results = lm.SqlSelect("SELECT COUNT(*) FROM members_ WHERE DATEPART(month, DateUnsub_) = " +monthDate + " AND DATEPART(year, DateUnsub_) = 2011 AND DATEDIFF(day, DateJoined_, DateUnsub_) <= 30");

考虑使用string.Format() 使其更具可读性或更好地使用参数化命令来防止 sql 注入攻击。

【讨论】:

    【解决方案2】:

    您的查询仅选择行数。当我查看您的 t-sql 代码时,您没有选择其他任何内容。

    查看您的属性后,请使用以下代码;

     switch (dateLookup)
        {
            case "January":
                monthDate = "01";
                break;
            case "February":
                monthDate = "02";
                break;
            case "March":
                monthDate = "03";
                break;
            case "April":
                monthDate = "04";
                break;
            case "May":
                monthDate = "05";
                break;
    

    等等。在英语中,在数字前后加上引号。

    【讨论】:

    • 是的,我只希望它显示一个月内订阅和退订的客户数量。
    • 好的,但是 dateLookupmonthDate 变量在哪里?向他们展示它们的定义位置。
    • 私有字符串 dateLookup;公共字符串 DateLookup { 获取 { 返回 dateLookup; } 设置 { dateLookup = 值; } } 公共字符串月份日期;
    • @OhMisterRabbit 看到我对答案的编辑。此外,您也应该将这些变量放在您的问题中。
    猜你喜欢
    • 2013-04-07
    • 2011-12-11
    • 2021-05-22
    • 2013-02-28
    • 2010-09-05
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多