Я пытаюсь отправить DataTable в хранимую процедуру, используя С#, .net 2.0 и SQLServer 2012 Express.
Примерно так делаю:
//define the DataTable
var accountIdTable = new DataTable("[dbo].[TypeAccountIdTable]");
//define the column
var dataColumn = new DataColumn {ColumnName = "[ID]", DataType = typeof (Guid)};
//add column to dataTable
accountIdTable.Columns.Add(dataColumn);
//feed it with the unique contact ids
foreach (var uniqueId in uniqueIds)
{
accountIdTable.Rows.Add(uniqueId);
}
using (var sqlCmd = new SqlCommand())
{
//define command details
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = "[dbo].[msp_Get_Many_Profiles]";
sqlCmd.Connection = dbConn; //an open database connection
//define parameter
var sqlParam = new SqlParameter();
sqlParam.ParameterName = "@tvp_account_id_list";
sqlParam.SqlDbType = SqlDbType.Structured;
sqlParam.Value = accountIdTable;
//add parameter to command
sqlCmd.Parameters.Add(sqlParam);
//execute procedure
rResult = sqlCmd.ExecuteReader();
//print results
while (rResult.Read())
{
PrintRowData(rResult);
}
}
Но затем я получаю следующую ошибку:
ArgumentOutOfRangeException: No mapping exists from SqlDbType Structured to a known DbType.
Parameter name: SqlDbType
При дальнейшем изучении (в MSDN, SO и других местах) выясняется, что .net 2.0 не поддерживает отправку DataTable в базу данных (отсутствуют такие вещи, как SqlParameter.TypeName
), но я все еще не уверен, так как никого не видел явно заявляя, что эта функция недоступна в .net 2.0
Это правда?
Если да, есть ли другой способ отправить набор данных в базу данных?
Заранее спасибо!