1

テーブル値の UDT パラメータを入力として受け取る SQL ストアド プロシージャを Visual Studio 2008 から実行しようとしています。Visual Studio 2008 でこのパラメーターを追加しましたが、このプログラムを実行すると、"ArgumentException - 指定された型がターゲット サーバーに登録されていません" というメッセージが表示されます。だから私はこの問題をグーグルで検索し、Visual Studio 2008 で SQL Server 2008 のこのテーブル タイプのプロパティに一致する新しいクラスを作成する必要があると考えています。しかし、テーブルUDTを含むインターネット上の例は見つかりません。そして、すべてのスカラー UDT の例を試しましたが、これらを変更してテーブルベースにする方法がわかりませんでした。
また、アセンブリを作成する必要があるかもしれないことも読みましたが、これが型を SQL Server 2008 にインポートするためだけに必要なのか、型を Visual Studio にインポートするためにも使用できるのかはわかりません。ところで、データベースとその SP は表示されますが、VS 2008 のサーバー エクスプローラーにはタイプが表示されません。データベースを更新しようとしましたが、タイプはまだ表示されませんでした。私がしなければならないことは簡単です。次のようなテーブルUDTがあります。

CREATE TYPE [dbo].[parseInputFile] AS TABLE(
[NumCols] [int] IDENTITY(1,1) NOT NULL,
[strRow] [varchar](500) NOT NULL,
PRIMARY KEY CLUSTERED 

そして、私の C# コードのコード スニペットは次のとおりです。

    public static int AppendData(string[] myStringArray)
    {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "dbo.uspAppendTableFromInput";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = conn;
            SqlParameter param = cmd.Parameters.Add("@InputFileParam", SqlDbType.Udt);
            param.UdtTypeName = "AdventureWorks.dbo.parseInputFile";
            param.Value = myStringArray;
            conn.Open();
            RowsAffected = cmd.ExecuteNonQuery();

RowsAffected は、これを実行した後に影響を受けた行がゼロであることを示しています。私は何が欠けていますか?この簡単な例を示すウェブサイトを教えてください。それともヒントをくれますか?「param.UdtTypeName="parseInputFile";」も試しました 上記のスニペットの場合、これは同じエラーを返しました。ところで、「myStringArray」は基本的にテーブルです。ストリングスシリーズです。例: myStringArray[0] = "Hello|Bob|How|Do"、myStringArray[1] = "I|Am|Fine|And" など。

4

1 に答える 1

2

基本的に、セットアップはほぼ正しく行われました - 途中で:-)

TVPの紹介記事 (テーブル値パラメーター) をチェックしてください。

基本的にあなたがする必要があるのはこれです:

  • ユーザー定義のテーブル型を作成します - あなたはすでにそれを持っています
  • これらのテーブル型を READONLY 入力パラメーターとして受け取るストアド プロシージャを作成します (これを取得したかどうかは不明です - まだコードを見ていません)
  • .NET から呼び出す。DataTable インスタンスを作成し、同じ構造を再作成する必要があります (フィールドとその型に関して - SQL チームの記事に示されています)。
  • そのDataTableを埋める
  • .NET で SqlConnection と (CommandType = Stored Proc の) SqlCommand を作成します。これは、テーブル型パラメーターを .NET で "SqlDbType.Structured" 型として定義し、その値を上記で作成した DataTable に設定します。
  • ストアド プロシージャ (SqlCommand にパッケージ化されている) を .NET から呼び出す

それはまったく役に立ちますか?非常に有益な SQL チームの記事を強くお勧めします。

マルク

于 2009-06-15T21:27:08.807 に答える