-2

我正在尝试将新的 DateTime 2013-09-22 传递到以下内容,但是它表明我的 sql 语法中有错误。任何想法?

DateTime WeekEnding = new DateTime(2013, 9, 22);
SqlDataReader myReader = null;
SqlCommand myCommand = new SqlCommand(
    @"select WeekEnding, sum(Total) as Total " +
     "from Data  where WeekEnding = '@WeekEnding' " +
     "group by WeekEnding", 
     myConnection);
myCommand.Parameters.Add("@WeekEnding", SqlDbType.DateTime);
myCommand.Parameters["@WeekEnding"].Value = WeekEnding;
myReader = myCommand.ExecuteReader();

while (myReader.Read())
{
    Console.WriteLine("Combined : " + myReader["Total"].ToString());
}
4

4 回答 4

1

您需要删除参数周围的引号。参数总是不带引号的,即使实际数据的表示会在 sql 字符串中被引用。

在旁注中,请考虑为您的 IDisposable 数据库对象(如 SqlDataReader、SqlCommand 等)使用块。

于 2013-09-26T14:45:32.113 回答
0

无需将参数括在单引号中,没有它也可以工作。

此外,在使用日期时,您必须记住DateTime对象具有日期和时间组件,因此最好将>=and<=一起使用,除非您确定数据库中的字段将始终将时间组件设置为午夜。

尝试这个:

DateTime WeekEnding = new DateTime(2013, 9, 22);
SqlDataReader myReader = null;
SqlCommand myCommand = new SqlCommand(
    @"select WeekEnding, sum(Total) as Total " +
     "from Data  where WeekEnding >= @WeekEnding AND WeekEnding <= @WeekEnding" +
     "group by WeekEnding", 
     myConnection);
myCommand.Parameters.Add("@WeekEnding", SqlDbType.DateTime);
myCommand.Parameters["@WeekEnding"].Value = WeekEnding;
myReader = myCommand.ExecuteReader();

while (myReader.Read())
{
    Console.WriteLine("Combined : " + myReader["Total"].ToString());
}
于 2013-09-26T14:45:56.700 回答
0

从查询中删除引号'@WeekEnding'。查询文本应该是这样的:

@"select WeekEnding, sum(Total) as Total " +
 "from Data  where WeekEnding = @WeekEnding " +
 "group by WeekEnding", 
于 2013-09-26T14:47:12.167 回答
-1

您可以使用 String.Format() 方法来实现您的目标。

例如 :

string query = @"select WeekEnding, sum(Total) as Total 
                                        from Data  where WeekEnding = {0} 
                                         group by WeekEnding";
string sql = String.Format(query,WeekEnding);
//then 
SqlCommand myCommand = new SqlCommand(sql , myConnection);
myReader = myCommand.ExecuteReader(); 
while (myReader.Read())
{
    Console.WriteLine("Combined : " + myReader["Total"].ToString());
}

希望这会有所帮助。

于 2013-09-26T14:49:49.497 回答