Табличный параметр SQL Server.Тип «Объект» - PullRequest
0 голосов
/ 24 мая 2018

Я хочу передать 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];
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...