Я хочу передать DataTable в качестве параметра в процедуру, этот DataTable возник из электронной таблицы Excel, которая затем преобразуется в DataTable.
В SQL я создал таблицу типов с обязательными полями,все столбцы с тем же именем, что и DataTable, который он получает.В этой электронной таблице Excel некоторые поля могут быть пустыми, то есть могут быть пустыми ... и эти поля правильно указаны в типе, который я создал в SQL.
Ниже приведен код для передачи таблицы данных.к процедуре
public void ImportToSql(DataTable dt)
{
using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["AppConnectionString"].ConnectionString))
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = @"EXEC [dbo].AddPrextAndOperacoes @dataTable";
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = cmd.Parameters.AddWithValue("@dataTable", dt);
param.SqlDbType = SqlDbType.Structured;
var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
conn.Open();
cmd.ExecuteNonQuery();
var result = returnParameter.Value;
}
}
Проблема состоит в том, что, когда он сообщил о следующей ошибке, когда обнаружил первое поле без значения
Тип столбца '{field}'не поддерживается.Тип 'Object'
Перед передачей dt в качестве параметра в ImportToSql () я проверяю, есть ли какой-либо столбец без значения, и добавляю DBNull.Value, даже тогда появляется ошибка
foreach (DataColumn col in dataTable.Columns)
{
foreach (DataRow row in dataTable.Rows)
{
row[col] = row[col]?.ToString() == "" ? DBNull.Value : row[col];
}
}