2017-10-03 14 views
0

DataTableをSQLクエリに追加する必要があります。DataTableをSQLのパラメータとして追加

queryText = @" 
WITH TaskDataTable AS 
(
    SELECT * 
    FROM @dataTable 
) 
INSERT INTO {0}.dbo.Tasks_Projects_PIR 
... 
FROM 
    TaskDataTable as TaskDataTable 
    LEFT JOIN dbo.MSP_EpmTask_UserView as t1 
    ON 1 = 1"; 


using (SqlCommand sqlCommand = new SqlCommand(queryText, ConfigurationProvider.sqlConnection)) 
{ 
    sqlCommand.CommandType = CommandType.Text; 

    sqlCommand.Parameters.AddWithValue("eventUID", eventUid);     
    SqlParameter parameter = sqlCommand.Parameters.AddWithValue("@dataTable", dataTable); 
    parameter.TypeName = "dbo.Tasks_Projects_PIR"; 
    parameter.SqlDbType = SqlDbType.Structured; 

    sqlCommand.ExecuteNonQuery(); 
} 

DataTableを作成コード:

列、パラメータ、または変数@dataTable:

DataTable myTvpTable = new DataTable("taskDataTable"); 
myTvpTable.Columns.Add("TaskUid", typeof(string)); 
myTvpTable.Columns.Add("TaskPredecessors", typeof(string)); 
myTvpTable.Columns.Add("TaskSuccessors", typeof(string)); 

foreach (ProjectDataSet.TaskRow taskRow in DataSetMaster.projectDS.Task) 
{ 
    var predecessors = string.Empty; 
    var successors = string.Empty; 
    PSIWorker.GetPredecessorsAndSuccessors(taskRow, out predecessors, out successors); 

    DataRow row = myTvpTable.NewRow(); 
    row["TaskUid"] = taskRow.TASK_UID.ToString();     
    row["TaskPredecessors"] = predecessors; 
    row["TaskSuccessors"] = successors; 
    myTvpTable.Rows.Add(row); 
} 

私は次のエラーを持っています。 :データ型* dbo.Tasks_Projects_PIRが見つかりません。

私は parameter.TypeNameを設定しない場合

または、:

テーブル型パラメータ 'のdataTable' は有効なタイプ名を持つ必要があります。

DataTableをパラメータとして使用できますか?

+0

は、SqlDataReaderのは、私を助けることができるどのように 'SqlDataReader' – styx

+0

からの値を使用して、テーブルを埋めるために' DataTable.Load'メソッドを使用しますか? – DeRibura

+0

私は何かobject = parameter.TypeNameをデータベースに持つべきですか?どのようなオブジェクトが必要ですか? – DeRibura

答えて

0
You need to create table type 
CREATE TYPE [dbo].[TaskDataTable ] AS TABLE 
(
TaskUid varchar(20), 
TaskPredecessors varchar(20) 
) 

use above table type in SP 

create procedure [dbo].spEmptask 
(
    @taskTable TaskDataTable readonly 
) 
As 
BEGIN 
--your logic 
END 

using(SqlConnection con = new SqlConnection(connectionstring)) 
{ 
    SqlCommand command = new SqlCommand("spEmptask",con); 
    command.CommandType = CommandType.StoredProcedure; 
command.Parameters.Add(new SqlParameter("@taskTable", dt(your DataTable))); 
} 
関連する問題