2017-01-18 74 views
0

我使用SQL Server 2014,我想在這裏調用存儲過程和它導致0行與枚舉沒有結果,同時調用存儲過程從C#

「枚舉沒有結果」

消息。這不是一個錯誤。我怎麼解決這個問題?

我的推測是,與參數,尤其是與DateTime類。我也用SqlDateAdapter,還有,我有同樣的結果。

以下是驗證碼。在此先感謝

public HttpResponseMessage GET() 
{ 
     string connstr = ConfigurationManager.ConnectionStrings["xyz"].ConnectionString; 
     DataSet ds = new DataSet(); 
     //SqlDataAdapter adapter; 
     SqlDataReader reader; 
     string testDate1 = "2017-01-16"; 
     DateTime dt1 = DateTime.ParseExact(testDate1, "yyyy-MM-dd", CultureInfo.InvariantCulture); 

     string testDate2 = "2016-12-16"; 
     DateTime dt2 = DateTime.ParseExact(testDate2, "yyyy-MM-dd", CultureInfo.InvariantCulture); 

     SqlParameter[] parameters = new SqlParameter[4]; 
     parameters[0] = new SqlParameter("@date1", SqlDbType.DateTime); 
     parameters[0].Value = testDate1; 

     parameters[1] = new SqlParameter("@date2", SqlDbType.DateTime); 
     parameters[1].Value = testDate2; 

     parameters[2] = new SqlParameter("@order", SqlDbType.Int); 
     parameters[2].Value = 2; 

     parameters[3] = new SqlParameter("@limit", SqlDbType.Int); 
     parameters[3].Value = 100; 

     try 
     { 

      SqlConnection conn = new SqlConnection(connstr); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandText="dbo.[abc]"; 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Connection = conn; 
      conn.Open(); 

      foreach(SqlParameter sprocParams in parameters){ 
       cmd.Parameters.Add(sprocParams); 
      } 

      reader = cmd.ExecuteReader(); 
      while(reader.HasRows){ 
       Console.WriteLine(reader.GetInt32(0)); 
      } 
      conn.Close(); 
     } 
     catch(SqlException sqe){ 
      System.Diagnostics.Debug.WriteLine(sqe.Message); 
      System.Diagnostics.Debug.WriteLine(sqe.StackTrace); 
     } 
}    
+0

哪一行引發異常?順便提一句,你可以跳過for循環來添加參數。只需使用'cmd.Parameters.AddRange(parameters);' –

+0

如果您使用相同的參數從SSMS運行存儲過程,它會返回行嗎?你可以發佈存儲過程嗎? –

+0

我知道了,我發佈這一刻後的那一刻。我的錯。這是一個非常愚蠢的錯誤。我交換了日期1和日期2. sproc期待它的順序。 雖然謝謝! –

回答

0

你傳遞參考字符串,而不是日期時間。

parameters[0] = new SqlParameter("@date1", SqlDbType.DateTime) 
parameters[0].Value = dt1; 
+0

我知道了,我發佈了這個之後的那一刻。我的錯。這是一個非常愚蠢的錯誤。我交換了日期1和日期2. sproc期待它的順序。謝謝你! –