C# 从字符串转换日期和/或时间时转换失败
我在SQL Server 2008中有一个查询C# 从字符串转换日期和/或时间时转换失败,c#,sql-server,visual-studio-2010,C#,Sql Server,Visual Studio 2010,我在SQL Server 2008中有一个查询 SELECT CONVERT(char(80), i.InvDate,3) AS InvDate, i.InvoiceNo, i.TaxAmount + i.SubTotal AS Amount, '' AS Payment, pd.GivenName FROM dbo.Invoice i INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID
SELECT
CONVERT(char(80), i.InvDate,3) AS InvDate,
i.InvoiceNo,
i.TaxAmount + i.SubTotal AS Amount,
'' AS Payment,
pd.GivenName
FROM
dbo.Invoice i
INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID)
WHERE (InvDate >= CONVERT(datetime, '16/10/2012', 105)) AND
(InvDate <= CONVERT(datetime, '16/10/2012', 105))
选择
将(字符(80),即InvDate,3)转换为InvDate,
i、 发票号,
i、 TaxAmount+i.小计为金额,
""作为报酬,,
吉文纳姆警长
从…起
dbo.发票一
内部连接dbo.PatientDetails pd ON(pd.MedicalRecordID=i.MedicalRecordID)
其中(InvDate>=转换(日期时间,'16/10/2012',105))和
(InvDate您的SQL代码没有问题。如果您有多行字符串,您只需要在命令中的双引号之前添加@
(逐字字符串文字)
SqlCommand objCmd = new SqlCommand(@"SELECT CONVERT(char(80), i.InvDate,3) AS InvDate,
i.InvoiceNo,
i.TaxAmount + i.SubTotal AS Amount,'' AS Payment,pd.GivenName
FROM dbo.Invoice i INNER JOIN dbo.PatientDetails pd
ON (pd.MedicalRecordID = i.MedicalRecordID)
WHERE (InvDate >= CONVERT(datetime, 'dd/MM/yyyy', 105)) AND
(InvDate <= CONVERT(datetime, 'dd/MM/yyyy', 105))", objConn);
SqlCommand objCmd=newsqlcommand(@“选择CONVERT(char(80),i.InvDate,3)作为InvDate,
i、 发票号,
i、 TaxAmount+i.小计为金额,“”为付款,pd.GivenName
从dbo.Invoice i内部加入dbo.PatientDetails pd
ON(pd.MedicalRecordID=i.MedicalRecordID)
其中(InvDate>=CONVERT(datetime,'dd/MM/yyyyy',105))和
(InvDate我更愿意将查询移动到存储过程,并从数据映射器类调用存储过程。CONVERT(datetime,'dd/MM/yyyyy',105)
正在尝试将文本dd/MM/yyyyy
转换为datetime
-这是行不通的
SqlCommand objCmd = new SqlCommand(@"SELECT CONVERT(char(80), i.InvDate,3)
AS InvDate,
i.InvoiceNo, i.TaxAmount + i.SubTotal AS Amount,'' AS Payment,pd.GivenName
FROM
dbo.Invoice i INNER JOIN dbo.PatientDetails pd
ON
(pd.MedicalRecordID = i.MedicalRecordID)
WHERE
(InvDate >= @StartDate)
AND
(InvDate <= @EndDate)", objConn);
objCmd.Parameters.AddWithValue("@StartDate",/* some C# expression that gives you the start date, as a DateTime value */);
objCmd.Parameters.AddWithValue("@EndDate",/* some C# expression that gives you the end date, as a DateTime value */);
SqlCommand objCmd=newsqlcommand(@“选择转换(char(80),i.InvDate,3)
截至目前,,
i、 发票编号,i.税金额+i.小计作为金额,''作为付款,pd.GivenName
从…起
dbo.Invoice i内部联接dbo.PatientDetails pd
在…上
(pd.MedicalRecordID=i.MedicalRecordID)
哪里
(InvDate>=@StartDate)
及
(InvDate您是否尝试过yyyy/MM/dd或MM/dd/yyyy?如果确实需要将日期指定为字符串,则应使用独立于语言和日期格式的格式ISO-8601。在SQL Server中,这是YYYYMMDD
(无破折号!)或yyyy-MM-DDTHH:MM:SS
(如果您也需要时间)。这两种方法是将日期指定为字符串的唯一可靠方法,它适用于所有SQL Server区域设置。嗨,manish,尝试了两种方法都不起作用。嗨@marc_,你能给我指一个引用,我可以用它来更改日期吗?要消除指定为字符串的情况吗?@Newbie创建一个存储过程
。它允许你传递参数。噢,现在它向我展示了其他一些东西。“必须声明标量变量“@SELECT”。“不,@
符号应该在字符串@”SELECT
之外,而不是”@SELECT
啊,很抱歉。我的错。即使使用@"选择
,它向我显示了相同的错误。奇怪。你不认为试图将字符串'dd/MM/yyyy'
转换为日期时间
是错误的吗?@Damien_不相信它。但我认为上面查询中的'dd/MM/yyyy'
是OP试图显示的日期格式,而不是原始日期。对吗objCmd.Parameters.AddWithValue(“@StartDate”,DateTime.Parse(dtpFrom.Text));
objCmd.Parameters.AddWithValue(“@EndDate”,DateTime.Parse(dtpTo.Text));
@Newbie-no.停止将日期转换为字符串。datetimepicker(我假设是dtpX
控件的功能)拥有一个Value
属性,该属性将日期作为DateTime
值提供。ADO.Net完全能够将.NetDateTime
值转换为SQL ServerDateTime
值。将这些值转换为字符串是不必要的转换(也是许多可能的错误的根源)。只需执行.AddWithValue即可(“@StartDate”,dtpFrom.Value)
。
SqlCommand objCmd = new SqlCommand(@"SELECT CONVERT(char(80), i.InvDate,3)
AS InvDate,
i.InvoiceNo, i.TaxAmount + i.SubTotal AS Amount,'' AS Payment,pd.GivenName
FROM
dbo.Invoice i INNER JOIN dbo.PatientDetails pd
ON
(pd.MedicalRecordID = i.MedicalRecordID)
WHERE
(InvDate >= @StartDate)
AND
(InvDate <= @EndDate)", objConn);
objCmd.Parameters.AddWithValue("@StartDate",/* some C# expression that gives you the start date, as a DateTime value */);
objCmd.Parameters.AddWithValue("@EndDate",/* some C# expression that gives you the end date, as a DateTime value */);