25
    [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

エラー

メッセージ6522、レベル16、状態1、プロシージャMyMethod、行0ユーザー定義ルーチンまたは集約 "MyMethod"の実行中に.NETFrameworkエラーが発生しました:System.ArgumentException:dbTypeNVarCharはこのコンストラクターに対して無効です。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を実行したくありません。プロジェクトビルドは.NET3.5用に設定されています。MSDNは、4.0がSQL2008R2でサポートされていないことを示しています。

4

2 に答える 2

44

問題は2つあります。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

        }
    }

反復例

于 2012-06-18T23:45:33.753 に答える
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);
        }
    }
于 2012-06-18T21:35:03.940 に答える