2012-06-23 30 views
5

Tôi đã một stored procedure mà chấp nhận một tài bảng định nghĩa kiểu gọi SeasonTable mà trông như thế này:C#: qua DataTable để thủ tục lưu trữ: Cột thứ tự vấn đề

SeasonTable

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

Stored thủ tục giống như được hiển thị bên dưới

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

Khi tôi gọi đây là từ C# ứng dụng

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

Khi tôi sử dụng bảng trên như param để SP từ C ứng dụng # nó được ném lỗi:

unable to convert "season1" to int.

Điều này có nghĩa thứ tự cột trong C# ứng dụng nên có giống như thứ tự cột trong SQL?

Bất kỳ trợ giúp nào về vấn đề này đều được đánh giá cao.

Cảm ơn trước

+0

bạn đã từng chơi chuyển đổi chuỗi Cột của bạn (SeasonId sau đó SeasonName) trong dt ?? – yogi

+0

@yogi ya sau khi chuyển đổi nó hoạt động tốt. !!!! – sandeep

+0

@yogi có thể cần phải thêm rằng như là câu trả lời: vì vậy mọi người biết nó đã được trả lời – whytheq

Trả lời

5

Hãy thử Switching cột chuỗi một cái gì đó của bạn như thế này

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

là hành vi này chính xác của C# và sql ????? – sandeep

+2

Trên thực tế 'Kiểu bảng do người dùng định nghĩa' loại trừ các cột trong định dạng đó chỉ trong đó chúng được tạo ra trong SQL, chúng ta không thể sắp xếp chúng, ít nhất là tôi không biết làm thế nào để làm điều đó. đồng bộ hóa. – yogi

+1

Tôi tự động tạo bảng dữ liệu cho điều này và tôi có thể xác nhận rằng như được mô tả ở đây, SQL Server bỏ qua tên và loại cột của bảng và chỉ dựa vào thứ tự của chúng khi một Proc được lưu trữ nhận tham số bảng. Vì vậy, một nơi nào đó bạn phải đặt hàng các cột đó. – philw

Các vấn đề liên quan