2012-06-23 10 views
5

Mam procedurę przechowywaną, która przyjmuje użytkownika zdefiniowane tabeli typu nazwie SeasonTable który wygląda tak:C#: przechodzącą DataTable do procedury przechowywanej: kolumna kolejność problem

SeasonTable

[SeasonId] [int] NOT NULL, 
    [SeasonName] [varchar](50) NOT NULL, 
    [Month] [int] NULL, 
    [IsDeleted] [bit] NOT NULL 

Przechowywane Procedura wygląda tak, jak pokazano poniżej:

CREATE PROCEDURE [dbo].[udpTest] 
(
    @STable dbo.SeasonTable READONLY 
) 
AS 
BEGIN 
SELECT [SeasonName] as SeasonName,[SeasonId],[Month],[IsDeleted] 
    FROM @AdminBillingSeasonsTable 
END 

Kiedy zadzwonić to od C# aplikacji

private DataTable TestCreateDataTable() 
{ 
      DataTable dt = new DataTable(); 

      dt.Columns.Add("SeasonName", typeof(string)); 
      dt.Columns.Add("SeasonId", typeof(int));     
      dt.Columns.Add("Month", typeof(int)); 
      dt.Columns.Add("IsDeleted", typeof(bool)); 
      dt.Rows.Add("season1",1, 4, false); 
      dt.Rows.Add("season2",2, 9, false); 
      dt.Rows.Add("season3",3, 11, false); 
      return dt; 
} 

Gdy używam powyższej tabeli jako param SP z aplikacji C# to jest rzucanie błąd:

unable to convert "season1" to int.

Czy to znaczy, że kolejność kolumn w C# aplikacji powinny być tak samo jak kolejność kolumn w SQL?

Każda pomoc w tym zakresie jest bardzo cenna.

góry dzięki

+0

Czy próbowałeś przełączania swoją kolejność kolumn (wtedy SeasonId SeasonName) w dt ?? – yogi

+0

@yogi ya po zmianie to działało dobrze. !!!! – sandeep

+0

@yogi może trzeba dodać, że jako odpowiedź: aby ludzie wiedzieli, że został odebrany – whytheq

Odpowiedz

5

spróbuj przełączyć kolumnie sekwencji coś jak ten

private DataTable TestCreateDataTable() 
      { 
       DataTable dt = new DataTable(); 

       dt.Columns.Add("SeasonId", typeof(int));  // seasonId and then 
       dt.Columns.Add("SeasonName", typeof(string)); // seasonName 
       dt.Columns.Add("Month", typeof(int)); 
       dt.Columns.Add("IsDeleted", typeof(bool)); 
       dt.Rows.Add("season1",1, 4, false); 
       dt.Rows.Add("season2",2, 9, false); 
       dt.Rows.Add("season3",3, 11, false); 
       return dt; 
      } 
+0

jest to dokładne zachowanie C# i sql ????? – sandeep

+2

Właściwie "typ tabeli zdefiniowany przez użytkownika" z wyjątkiem kolumn w tym formacie, tylko w których zostały utworzone w SQL, nie możemy ich żonglować, przynajmniej nie wiem jak to zrobić, więc lepiej jest zachować poprawność sekwencji & synchronizować. – yogi

+1

Generuję automatycznie moje tabele danych dla tego i mogę potwierdzić, że jak opisano tutaj, SQL Server ignoruje nazwy i typy kolumn tabeli i opiera się tylko na ich kolejności, gdy Zapisany Proces otrzymuje parametr tabeli. Więc gdzieś musisz zamówić te kolumny. – philw

Powiązane problemy