簡體   English   中英

dbType NVarChar對此構造函數無效

[英]The dbType NVarChar is invalid for this constructor

    [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”的過程中發生了.NET Framework錯誤:System.ArgumentException:dbType NVarChar對此構造函數無效。 System.ArgumentException:at Microsoft.SqlServer.Server.SqlMetaData.Construct(字符串名稱,SqlDbType dbType,布爾useServerDefault,布爾isUniqueKey,SortOrder columnSortOrder,Int32 sortOrdinal)位於Microsoft.SqlServer.Server.SqlMetaData..ctor(字符串名稱,SqlDbType dbType )在WcfClrApps.MyNamespace.MyMethod()

如何返回我自己創建的記錄? 我不想運行任何SQL。 專為.NET 3.5設置了項目構建。 MSDN指示SQL 2008 R2不支持4.0。

問題有兩個。 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

        }
    }

迭代的例子

從來沒有以這種方式做任何事情,但是這不會嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM