SQL查询在SQL Server 2008中有效,但在C#中不起作用

时间:2013-02-08 19:53:37

标签: c# sql-server-2008

我正在处理一个应用程序,我必须从数据库中检索一些数据。我使用以下查询。

SELECT DISTINCT Context.ContextId, ContextName 
FROM Context
INNER JOIN RunInstance 
   ON Context.ContextId IN 
      (SELECT RunInstance.ContextId 
       FROM RunInstance 
       INNER JOIN ProcessInstance 
          ON RunInstance.RunInstanceId 
             IN (SELECT RunInstanceId FROM ProcessInstance 
                 WHERE RiskDate = '2010-08-20' )); 

此查询在SQL Server 2008中完美运行。

但是,当我把它放在我的C#应用​​程序中时,它没有显示任何输出。

我的代码:

string squery = @"SELECT DISTINCT Context.ContextId, ContextName FROM Context INNER JOIN RunInstance ON Context.ContextId IN 
    (Select RunInstance.ContextId From RunInstance 
    INNER JOIN ProcessInstance ON RunInstance.RunInstanceId 
    IN (SELECT RunInstanceId FROM ProcessInstance Where 
    RiskDate = '2010-08-20' )); ";

using(SqlConnection sqcon = new SqlConnection("Data Source=WMLON-Z8-SQL20,61433;Initial Catalog=statusdb;Integrated Security=True")){
    sqcon.Open();
    using(SqlCommand command = new SqlCommand(squery,sqcon))
        using(SqlDataReader reader = command.ExecuteReader()){
            while(reader.Read()){
                Console.WriteLine(reader[0]+"\t"+reader[1]);
            }
        }
}     

谁能告诉我这是什么问题?

1 个答案:

答案 0 :(得分:0)

请将CommandText添加到CommandType并尝试使用。

using(SqlConnection sqcon = new SqlConnection(
"Data Source=WMLON-Z8-SQL20,61433;Initial Catalog=statusdb;Integrated Security=True"))
{
   using(SqlCommand command = new SqlCommand(squery,sqcon)){
      command.CommandType = CommandType.Text;
      sqcon.Open();
      using(SqlDataReader reader = command.ExecuteReader())
      {
          while(reader.Read()){
            Console.WriteLine(reader[0]+"\t"+reader[1]);
          }
      }
      sqcon.Close();
   }
} 

-- Using EXISTS or IN could improve your query
    SELECT DISTINCT
            Context.ContextId ,
            ContextName
    FROM    Context
            INNER JOIN RunInstance ON Context.ContextId = RunInstance.ContextId 
            INNER JOIN ProcessInstance ON RunInstance.RunInstanceId = ProcessInstance.RunInstanceId
    WHERE   RiskDate = '2010-08-20'