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