c# sql-server-2008 sqlclr

c# - El dbType NVarChar no es válido para este constructor



sql-server-2008 sqlclr (2)

El problema es doble. 1. Se requiere la longitud máxima. 2. Se 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 } }

Ejemplo iterativo

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

Cuando ejecuto el método en SQL

EXEC MyMethod

Error

Mensaje 6522, nivel 16, estado 1, procedimiento MyMethod, línea 0 Se produjo un error de .NET Framework durante la ejecución de la rutina definida por el usuario o "MyMethod": System.ArgumentException: el dbType NVarChar no es válido para este constructor. System.ArgumentException: at Microsoft.SqlServer.Server.SqlMetaData.Construct (nombre de la cadena, SqlDbType dbType, Boolean useServerDefault) ) en WcfClrApps.MyNamespace.MyMethod ()

¿Cómo puedo devolver un registro que yo mismo creo? No quiero ejecutar ningún SQL. La compilación del proyecto se establece para .NET 3.5. MSDN indica que 4.0 no es compatible con SQL 2008 R2.


Nunca he hecho nada de esta manera, pero ¿esto no funcionaría?

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