0

list<listitem>アプリケーションに、ストアド プロシージャに渡すメソッドがあります。渡すテーブル型のデータ型を作成しましたlist<listitem>。ここで、ストアド プロシージャをループして別のテーブルに挿入する必要があります。その目的のために、自動的に生成されるテーブル タイプに行 ID 列を作成しました。

テーブル型には 2 つの列があるため、外部から 2 つのパラメーターが渡されることが期待されますが、ID 列によって生成しています。値フォームを外部に渡さないようにする方法はありますか?

  public void test(List<string> listItem)            {
                 var table = new DataTable(); 
                 table.Columns.Add("col1", typeof(string));
                 foreach (string col1 in listItem) { table.Rows.Add(col1); }

                 SqlCommand cmd1 = new SqlCommand("TableTypeUpdateAnswers", conn);
                cmd1.CommandType = CommandType.StoredProcedure;
                SqlParameter sqlParam = cmd1.Parameters.AddWithValue("@tvpUpdateAnswers",table);
                  sqlParam.SqlDbType = SqlDbType.Structured ;
                  sqlParam.TypeName = "dbo.AnswerTableType";

                conn.Open();
                try
                { }
              catch (Exception e)
                { }
  }

テーブル タイプを作成する SQL は次のとおりです。

CREATE TYPE [dbo].[AnswerTableType] AS TABLE(
    RowID int not null primary key identity(1,1),
    [col1] [nvarchar](50) NULL
)

そして、ストアドプロシージャは次のとおりです。

ALTER PROCEDURE [dbo].[TestTableType]
    @TVPUPDATEANSWERS DBO.ANSWERTABLETYPE READONLY
AS
DECLARE
    @CURRENTROW INT,
         @VANSID int ,
    @ROWSTOPROCESS INT

BEGIN
    SET @CURRENTROW=0
    SELECT L.col1 FROM @TVPUPDATEANSWERS L;
    SET @ROWSTOPROCESS=@@ROWCOUNT
        WHILE @CURRENTROW<@ROWSTOPROCESS
            BEGIN
                SET @CURRENTROW=@CURRENTROW+1
                                     (SELECT @VANSID = col1
                 FROM @TVPUPDATEANSWERS 
                 WHERE ROWID=@CURRENTROW);

                //do something with table type datatype

                INSERT INTO DBO.table1(col3,col4) 
                VALUES(@VANSID ,@col4);
            END
END
4

1 に答える 1

0

この種のアプローチを使用することでメリットが得られるようです-チェックして、私に知らせてください... http://ilovedevelopment.blogspot.co.uk/2012/01/manage-multiple-updates-to-data-using- c.html

于 2012-08-13T15:38:48.123 に答える