从字符串转换日期和/或时间时 C# 转换失败
Posted
技术标签:
【中文标题】从字符串转换日期和/或时间时 C# 转换失败【英文标题】:C# Conversion failed when converting date and/or time from character string 【发布时间】:2012-01-13 18:32:00 【问题描述】:过去几个小时我在谷歌上搜索,这些问题都不适用于我的案例,所以希望你们能提供帮助。 我有一个报告应用程序,用户可以从 DateTimePicker 中选择一个日期,并且将显示具有最大数量值的项目。我使用报表查看器控件来显示信息。
这是我的表适配器中的 SQL 查询:
SELECT TOP (1)
Drink_Name,
SUM(Quantity) AS NoDrink,
Bill_No,
Staff_No,
Bill_Date,
Bill_Value,
Customer_No,
Unit_Price,
Quantity
FROM
(SELECT
Bill.Bill_No,
Bill.Staff_No,
Bill.Bill_Date,
Bill.Bill_Value,
Bill.Customer_No,
Bill_Detail.Drink_Name,
Bill_Detail.Bill_No AS Expr1,
Bill_Detail.Unit_Price,
Bill_Detail.Quantity
FROM
Bill INNER JOIN
Bill_Detail ON Bill.Bill_No = Bill_Detail.Bill_No
WHERE
(Bill.Bill_Date = @Bill_Date)
) AS Temp
GROUP BY Drink_Name,
Bill_No,
Staff_No,
Bill_Date,
Bill_Value,
Customer_No,
Unit_Price,
Quantity
ORDER BY NoDrink DESC
这是生成数据并将数据加载到报表数据集中的代码
CoffeeShopDataSetTableAdapters.DataTable1TableAdapter adapter =
new CoffeeShopDataSetTableAdapters.DataTable1TableAdapter();
CoffeeShopDataSet.DataTable1DataTable table =
new CoffeeShopDataSet.DataTable1DataTable();
adapter.FillByMax(table, dateTimePicker1.Value.ToShortDateString());
ReportDataSource maxdatasource =
new ReportDataSource("DataSet1form3", (DataTable)table);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(maxdatasource);
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();
问题是我总是得到这个错误:
“System.Data.dll 中发生了“System.Data.SqlClient.SqlException”类型的未处理异常
附加信息:从字符串转换日期和/或时间时转换失败。"
当我尝试使用 SQL Server Management 2008 进行 SQL 查询时,它工作得很好,所以我认为这是 VS 的问题。 提前谢谢大家。 抱歉英语不好
【问题讨论】:
dateTimePicker1.Value.ToShortDateString()返回的值是多少Bill.Bill_Date
是数据库中的有效日期时间字段,还是字符类型字段(varchar、varchar 等)?它可以包含空值吗?
为什么要传递字符串而不是日期时间?
【参考方案1】:
我会明确表达您的日期,因此日期时间格式之间不会混淆。
1) 更改将日期转换为具有显式格式的字符串的行
dateTimePicker1.Value.ToString("yyyyMMdd");
2) 更改 SQL(假设 Bill.Bill_Date 列是日期
(Bill.Bill_Date = CONVERT(DATE, @Bill_Date, 112)
【讨论】:
我将保留 SQL 并简单地将实际的 DateTime 值dateTimePicker1.Value
作为参数传递。
是的,那会更理想,但是 CoffeeShopDataSetTableAdapters.DataTable1TableAdapter 代码不可用,所以我不知道用作@Bill_Date 的 SQLParameter 的数据类型和 FillByMax 方法参数需要更改,因为第二个参数现在是字符串类型。
@Simon 请试试这个建议,让我们知道结果如何。以上是关于从字符串转换日期和/或时间时 C# 转换失败的主要内容,如果未能解决你的问题,请参考以下文章
将 C# 日期时间发送到 SQL Server - 错误“从字符串转换日期和/或时间时转换失败”