【问题标题】:VB.NET & MySQL : DataGrid error displaying MonthNameVB.NET & MySQL:显示 MonthName 的 DataGrid 错误
【发布时间】:2012-07-17 11:25:01
【问题描述】:

在 MySQL 数据的 DataGridView 中显示 MonthName 时遇到问题

查询:

SELECT ItemName, Description, PurchaseDate, MONTHNAME(PurchaseDate) AS PurchaseMonth FROM tblItems

错误:

System.ArguementException: 参数无效

显示月份编号,使用MONTH(PurchaseDate) 效果很好,但是当我尝试显示月份名称时,我得到一个数据网格错误。当我在 MySQL 中运行 SQL 时,它会返回预期的结果。

当我添加 DataError 事件时,它只会在应为 MONTHNAME(PurchaseDate) 的字段中显示一个红色的感叹号。

【问题讨论】:

  • 该网格的单元格是否定义为仅接受 INT 值?
  • 不,尝试在 vb 代码中将字符串 'PurchaseMonth' 打印到单元格中并且显示正常
  • 你使用的是强类型DataTable/TableAdapter吗?
  • Dim daItems As New OdbcDataAdapter ... Dim dsItems As New DataSet ... Dim dtItems As New DataTable 我还调整了查询​​以将其他列(包含字符串)放入该字段并且工作正常.似乎是 MonthName 的问题
  • 刚刚投票赞成 BigYellowCactus 的评论 - 如果 Grid 中的该列不期望字符串与 int,那是你的问题。

标签: mysql vb.net datagridview


【解决方案1】:

解决了。 尽管 MonthName(PurchaseDate) 在直接针对数据库运行时有效,但在从 VB.NET 传入时,我必须在 SQL 字符串中使用 Cast

修改后的 SQL:

SELECT ItemName, Description, PurchaseDate, CAST(MONTHNAME(PurchaseDate) AS CHAR) AS PurchaseMonth FROM tblItems

【讨论】:

    【解决方案2】:

    你为什么要这么做?

    只需加载原始日期并使用格式字符串获取名称

    dim purchaseDate as DateTime = DateTime.Now
    
    dim purchaseMonth as String = purchaseDate.Format("MMMM")
    ' or
    dim purchaseMonth as String = String.Format("{0}", purchasDate")
    

    数据绑定也支持格式化。

    这种方法的优点是它尊重用户环境中的本地人:

    ' english: July
    ' german:  Juli
    

    【讨论】:

    • 我试图直接从数据集中填充网格
    • 这应该不是问题,您可以将数据集绑定到您的网格并将列(在网格中,而不是数据表中)的Format 设置为“MMMM”。不确定您使用的是 WinForms 还是 ASP.NET,但它应该类似于 datagrid.Columns("PurchaseDate").DefaultCellStyle.Format = "MMMM"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 2011-12-13
    • 2017-01-15
    • 1970-01-01
    相关资源
    最近更新 更多