2009-06-15 7 views
1

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

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

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

にrowsAffected
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(); 

これを実行した後、影響を受けたゼロの行を示しています。私は何が欠けていますか?私はこの簡単な例を示すウェブサイトを指摘できますか?それとも私にヒントを教えて?私も試みた 'param.UdtTypeName = "parseInputFile";'上記のスニペットでは、これは同じエラーを返しました。ところで、 "myStringArray"は本質的にテーブルです。それは一連の文字列です。例えばmyStringArray [0] = "こんにちは|ボブ|観光|方法"、myStringArray [1] = "I |アム|ファイン|そして" など

+0

例http://stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause/337864#337864 – ahains

+0

@何あなたのストアドプロシージャは次のように見えますか?ほとんどあなたが宣言したパラメータのリスト –

+0

そして、正確に何を達成しようとしていますか?ユーザー定義のテーブル型のパラメータセットを使用して、格納されたprocを呼び出しますか?または、格納されたprocを呼び出すと、そのテーブルが返されます。あまり明確ではない... –

答えて

2

基本的に、あなたはあなたのセットアップはほとんど右ました - 途中:-)通じ

TVPのテーブル値のパラメータの紹介記事を確認してください。これは、私がGUESSあなたが使用しようとしているものですか?

  • SQLチーム:SQL Server 2008 Table Valued Parameters
  • ADO.NETチームのブログ: - あなた

    は、基本的にはあなたが何をする必要があるか、このですそれが既にあります

  • これらのテーブル型をREADONLY入力パラメータとして使用するストアドプロシージャを作成します(sもしあなたがこれを持っていれば - あなたのコードはまだ見ていない)
  • .NETからの呼び出し; DataTableインスタンスを作成し、同じ構造体を再作成する必要があります(SQLチームの記事を参照)。 ).NETのテーブルタイプパラメータを.NETで定義し、その値を上記で作成したDataTableに設定します
  • .NETからのproc(SqlCommandにパッケージ化されています)の呼び出し

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

マルク・

+0

これが実際に動作するかどうかを確認するテスト – salvationishere

+0

チップのおかげで、マーク!私はちょうどこの同じ問題に関する別の質問を掲載しました。私はこのウェブサイトでいくつかの問題を抱えていたので、別の質問として出版しました。あなたはその他の質問を見てみませんか?私は今このウェブサイトに2つの質問を投稿しているので、見つけやすいはずです。ありがとう。 – salvationishere