[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);
}
}
当我在SQL中运行该方法时
EXEC MyMethod
错误
Msg 6522,Level 16,State 1,Procedure MyMethod,Line 0 A .NET 在执行用户定义的例程或执行期间发生框架错误 aggregate“MyMethod”:System.ArgumentException:dbType NVarChar 对于此构造函数无效。 System.ArgumentException:at Microsoft.SqlServer.Server.SqlMetaData.Construct(String name, SqlDbType dbType,Boolean useServerDefault,Boolean isUniqueKey, SortOrder columnSortOrder,Int32 sortOrdinal)at Microsoft.SqlServer.Server.SqlMetaData..ctor(String name,SqlDbType dbType)在WcfClrApps.MyNamespace.MyMethod()
如何归还我自己制作的唱片?我不想运行任何SQL。项目构建是为.NET 3.5设置的。 MSDN表示SQL 2008 R2中不支持4.0。
答案 0 :(得分:36)
这个问题有两个问题。 1.最大长度是必需的。 2. 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
}
}
答案 1 :(得分:3)
从未以这种方式做过任何事情,但这不会起作用吗?
[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);
}
}