I need to add DataTable to SQL query.
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 creation code:
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);
}
I have next errors:
Column, parameter, or variable @dataTable. : Cannot find data type* dbo.Tasks_Projects_PIR.
Or, if I don't set parameter.TypeName
:
The table type parameter 'dataTable' must have a valid type name.
Can I use DataTable as parameter?