5

Dzwonię poniższy kod.C#, sp_executesql i Niepoprawna składnia

na linii (IDataReader dr = cmd.ExecuteReader()) sql barfs z przewozem Niepoprawna składnia w pobliżu 'CompanyUpdate'.

using (SqlCommand cmd = new SqlCommand("CompanyUpdate")) 
     { 
      cmd.Parameters.Add("@CompanyID",SqlDbType.Int); 
      cmd.Parameters.Add("@Description",SqlDbType.VarChar,50); 
      cmd.Parameters["@CompanyID"].Value = companyid; 
      cmd.Parameters["@Description"].Value = description; 

      SqlConnection cn = new SqlConnection("Data Source=[datasource];Initial Catalog=dotNext;User ID=[user];Password=[password];Pooling=True;Application Name=dotNext"); 
      cn.Open(); 
      cmd.Connection = cn; 
      using (IDataReader dr = cmd.ExecuteReader()) 
      { 
       if (dr.Read()) 
       { 
        this.CompanyID = dr.GetInt32(0); 
       } 
      } 
     } 

miałem przyjrzeć sqlprofiler i zauważył, co następuje:

exec sp_executesql N'CompanyUpdate',N'@CompanyID int,@Description varchar(50)',@CompanyID=56,@Description='APC' 

Jego zawijania moja komenda wit sp_executesql. Wszystkie moje inne polecenia sql są po prostu wykonywane bez żadnych problemów.

Więc moje pytanie jest dwojakie: 1. Dlaczego przy użyciu sp_executesql? 2. Co robię źle?

Szczegóły: SQL2005, C#, VS2005

Odpowiedz

11

Zauważyłem, że nie byli ustawić CommandType do StoredProcedure ... Ja nie wiem, czy to jest przyczyną problemu czy nie:

cmd.CommandType = CommandType.StoredProcedure; 

Zrobiłem to tyle razy, nie mogę liczyć.

Tip wyzwolić swoją pamięć, kiedy ta generuje wyjątki następnym razem:

Have zapytań SQL Profiler otwartą natomiast używasz aplikacji. Po wykonaniu każdego polecenia pokazuje wygenerowany i uruchomiony kod SQL po stronie serwera. Jeśli SQL generowane zaczyna sp_executesql następnie zapytaniu wtedy to jest uruchamiane jako zwykły zapytania - czyli cmd.CommandType = CommandType.Text, jeśli zaczyna się exec, są szanse, że prowadzony jako przechowywanych proc. Upewnij się, że generujesz poprawny kod SQL dla typu zapytania, które chcesz uruchomić.

+1

To takie denerwujące! Dziękuję Ci! –

+0

lol - czasami po prostu ma inny zestaw oczu ... – BenAlabaster

+0

Argh, dzięki. Dlaczego, u licha, nie byłoby błędu, gdyby dodać parametry do SqlCommand i nie ustawić go na StoredProcedure ... – jcollum

Powiązane problemy