2012-06-23 16 views
5

Ho una stored procedure che accetta un User tabella definita tipo chiamato SeasonTable che assomiglia a questo:C#: passando dataTable di stored procedure: colonna problema ordine

SeasonTable

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

Stored la procedura è come quella riportata di seguito

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

Quando chiamo questo da C# applicazione

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; 
} 

Quando uso la tabella di cui sopra come param per SP da C# app che sta gettando errore:

unable to convert "season1" to int.

Significa questo l'ordine delle colonne in C# app dovrebbe essere come l'ordine delle colonne in SQL?

Qualsiasi aiuto in merito è molto apprezzato.

Grazie in anticipo

+0

Ti è provato a passare la sequenza Colonna (SeasonId poi SeasonName) in dt ?? – yogi

+0

@yogi ya dopo averlo acceso ha funzionato bene !!!! – sandeep

+0

@yogi forse ha bisogno di aggiungere che come risposta: così le persone sanno che è stato risposto – whytheq

risposta

5

prova a cambiare la vostra colonna sequenza di qualcosa come questo

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

è questo il comportamento esatto di C# e sql ????? – sandeep

+2

In realtà "Tipo di tabella definito dall'utente" esclude le colonne in quel formato solo in cui sono state create in SQL, non possiamo manipolarle, almeno non so come farlo, Quindi è meglio mantenere la sequenza corretta e sincronizzare. – yogi

+1

Sto generando automaticamente le mie tabelle di dati per questo e posso confermare che, come descritto qui, SQL Server ignora i nomi e i tipi di colonne della tabella e fa affidamento solo sull'ordine di loro quando un Procedi memorizzato ottiene un parametro di tabella. Quindi da qualche parte devi ordinare quelle colonne. – philw

Problemi correlati