2012-06-18 32 views
16
[Microsoft.SqlServer.Server.SqlProcedure] 
    public static void MyMethod() 
    { 
     string connectionString = "context connection=true"; 
     using (SqlConnection connection = new SqlConnection(connectionString)) 
     { 
      connection.Open(); 
      SqlMetaData[] metaData = { 
             new SqlMetaData("Column1", System.Data.SqlDbType.NVarChar) 
             ,new SqlMetaData("Column1", System.Data.SqlDbType.NVarChar) 
            }; 
      SqlDataRecord record = new SqlDataRecord(metaData); 
      record.SetString(0,"hello world"); 
      SqlContext.Pipe.SendResultsRow(record); 
     } 
    } 

Khi tôi chạy các phương pháp trong SQLCác dbType nvarchar là không hợp lệ cho constructor này

EXEC MyMethod

Lỗi

Msg 6522, Level 16, State 1, Thủ tục MyMethod, Line 0 .NET Một lỗi .NET xảy ra trong quá trình thực thi quy trình do người dùng định nghĩa hoặc tổng hợp "MyMethod": System.ArgumentException: dbType NVarChar không hợp lệ đối với hàm tạo này. System.ArgumentException: tại Microsoft.SqlServer.Server.SqlMetaData.Construct (String name, SqlDbType dbType, Boolean useServerDefault, Boolean isUniqueKey, SortOrder columnSortOrder, Int32 sortOrdinal) tại Microsoft.SqlServer.Server.SqlMetaData..ctor (String tên, SqlDbType dbType) tại WcfClrApps.MyNamespace.MyMethod()

Làm cách nào để trả lại bản ghi mà tôi tự tạo? Tôi không muốn chạy bất kỳ SQL. Project build được thiết lập cho .NET 3.5. MSDN cho biết 4.0 không được hỗ trợ trong SQL 2008 R2.

+0

là vấn đề lựa chọn loại, hoặc là vấn đề mà bạn đã không chỉ định một chiều dài? –

Trả lời

27

Sự cố là hai lần. 1. Độ dài tối đa là bắt buộc. 2. Yêu cầu SendResultsStart()/SendResultsEnd().

[Microsoft.SqlServer.Server.SqlProcedure] 
    public static void MyMethod() 
    { 
     string connectionString = "context connection=true"; 
     using (SqlConnection connection = new SqlConnection(connectionString)) 
     { 
      connection.Open(); 
      SqlMetaData[] metaData = { 
             new SqlMetaData("Column1", System.Data.SqlDbType.NVarChar, 100)//Max length has to be specified 
             ,new SqlMetaData("Column1", System.Data.SqlDbType.NVarChar, 100)//same story 
            }; 
      SqlDataRecord record = new SqlDataRecord(metaData); 
      SqlContext.Pipe.SendResultsStart(record);//SendResultsStart must be called 

      //create a row and send it down the pipe 
      record.SetString(0,"hello world"); 
      SqlContext.Pipe.SendResultsRow(record); 

      SqlContext.Pipe.SendResultsEnd();//End it out 

     } 
    } 

Iterative example

+2

Đối với lỗi cụ thể 'Các dbType NVarChar không hợp lệ cho constructor này' chỉ thêm tham số MaxLength giải quyết vấn đề. Hóa ra rằng khi sử dụng SqlDbType.NVarChar, bạn phải sử dụng hàm tạo chấp nhận tham số MaxLength. – BornToCode

3

Không bao giờ làm bất cứ điều gì theo cách này, nhưng điều này sẽ không hoạt động?

[Microsoft.SqlServer.Server.SqlProcedure] 
    public static void MyMethod() 
    { 
     string connectionString = "context connection=true"; 
     using (SqlConnection connection = new SqlConnection(connectionString)) 
     { 
      connection.Open(); 
      SqlMetaData[] metaData = { 
             new SqlMetaData("Column1", System.Data.SqlDbType.VarChar) 
             ,new SqlMetaData("Column2", System.Data.SqlDbType.VarChar) 
            }; 
      SqlDataRecord record = new SqlDataRecord(metaData); 
      record.SetString(0,"hello world"); 
      SqlContext.Pipe.SendResultsRow(record); 
     } 
    } 
+0

Sự khác biệt duy nhất tôi thấy là NVarchar để varchar. Đó là những gì tôi bắt đầu với và kết quả là tương tự. –

+0

cũng thay đổi tên cột như tôi tin rằng sẽ có lỗi, bạn có thêm mã cho tôi để chạy thử nghiệm đơn vị không? – Neo

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