2012-06-23 21 views
5

Ich habe eine gespeicherte Prozedur, die genannt Benutzerdefinierte Tabellentyp akzeptiert SeasonTable, die wie folgt aussieht:C#: passing Datatable gespeicherte Prozedur: Spaltenreihenfolge Problem

SeasonTable

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

Stored Das Verfahren ist wie folgt:

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

Als ich dies von C# Anwendung aufrufen

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

Wenn ich die obige Tabelle als param verwenden, um von C# app SP ist es Fehler zu werfen:

unable to convert "season1" to int.

Bedeutet dies die Reihenfolge der Spalten in app C# sollte Gleich wie die Spaltenreihenfolge in SQL?

Jede Hilfe in diesem Zusammenhang wird sehr geschätzt.

Vielen Dank im Voraus

+0

Schalt Haben Sie versucht, Ihre Spaltenreihenfolge (SeasonId dann SeasonName) in dt Schalt ?? – yogi

+0

@Yogi ya nach dem Umschalten funktionierte es gut. !!!! – sandeep

+0

@yogi vielleicht muss das als Antwort hinzufügen: so Leute wissen, dass es beantwortet wurde – whytheq

Antwort

5

Versuchen Sie, Spaltenreihenfolge so etwas wie dieses

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

ist dies das genaue Verhalten von C# und sql ????? – sandeep

+2

Eigentlich 'User defined table type' unterscheidet Spalten in diesem Format nur in denen sie in SQL erstellt wurden, wir können sie nicht jonglieren, zumindest weiß ich nicht wie das geht, also ist es besser Sequenz korrekt zu halten & synchronisieren. – yogi

+1

Ich erzeuge automatisch meine Datentabellen für diese und ich kann bestätigen, dass wie hier beschrieben SQL Server die Namen und Typen der Tabellenspalten ignoriert und nur in der Reihenfolge von ihnen, wenn ein Stored Proc einen Tabellenparameter erhält. Also müssen Sie diese Spalten irgendwo bestellen. – philw

Verwandte Themen