1

私は c# と .Net が初めてで、あなたの助けが必要です。

テーブル値パラメーター (id のリスト) を受け入れる DB にプロシージャを作成しました。Oracle 連想配列に相当するものを探しています。

--DB の新しいデータ型:

CREATE TYPE IDType AS TABLE
(
        ID bigint  
)
GO



-- DB Procedure
Create procedure TVP_PROC (@ID IDType readonly)
    Declare @TVP IDType
    Insert into @TVP select ID from @ID
As
  Update  my_tbl set id=(select ID from @TVP)

次のように実行する必要があります: exec TVP_PROC @ID //@ID は ID の alist です

.Net コード:

Public void UpdateID (List long<long> IDS )
{
    Datatable datatable = new datatable ();
    Datatable.columns.add (“IDS”,typeof(int64));
    Foreach (int64 id in IDS)
    {
        Datatable.Rows.Add(id);
    }
}


Var Query =hibernate.createsqlquery(“Exec TVP_PROC @ID:IDS”);

クエリ。?????????

質問:

  1. データテーブル変数を使用し、反復ごとにIDを割り当てる以外に、それを書くための好ましい方法はありますか?

  2. さらに重要なのは、テーブル\リスト変数を割り当てる適切な方法は何ですか? この種のデータ型に定義できるテーブル値\配列変数はありますか?

4

2 に答える 2

1

C# でテーブル型とストアド プロシージャをデータベースに作成したので、次のようなコードが必要です。

// define connection and command object
using(SqlConnection conn = new SqlConnection("your-connection-string-here"))
using(SqlCommand cmd = new SqlCommand("dbo.TVP_PROC", conn))
{
   // define the command to be a stored procedure
   cmd.CommandType = CommandType.StoredProcedure;

   // set up parameters
   cmd.Parameters.Add("@ID", SqlDbType.Structured).Value = datatable;

   // open connection, execute stored procedure, close connection
   conn.Open();
   cmd.ExecuteNonQuery();
   conn.Close();
}
于 2012-08-26T09:57:02.307 に答える
1
    Datatable datatable = new datatable ();
    Datatable.columns.add (“IDS”,typeof(int64));
    Foreach (int64 id in IDS)
    {
        Datatable.Rows.Add(id);
    }

 // Configure the SqlCommand and table-valued parameter.
 SqlCommand insertCommand = new SqlCommand("TVP_PROC", connection);

 insertCommand.CommandType = CommandType.StoredProcedure;

 //pass here your datatable
 SqlParameter tvpParam = insertCommand.Parameters.AddWithValue("@ID", datatable);

 //specify type of your parameter
 tvpParam.SqlDbType = SqlDbType.Structured;

  // Execute the command.
  insertCommand.ExecuteNonQuery();
于 2012-08-26T09:57:12.213 に答える