Как проверить, является ли тип данных столбца SQL int, и изменить, верно ли условие

#c# #sql #sql-server-ce

Вопрос:

Я хочу проверить , соответствует ли тип данных столбца SQL Server Compact Int , и если да, измените его на Float .

Однако я только что получил это сообщение, что тип-строка, тогда как тип столбца Номер 7 «Сумма» — INT.

На данный момент я не указал SQL-запрос для перехода с INT на Float, я добавлю, как только условие будет выполнено, и он получит правильный тип данных столбца «Сумма», который сейчас является INT.

 private void CheckDataType()
{
    MessageBox.Show("Checking Data Type");
    string sqlcon = @"Data Source = .Records.sdf;Persist Security Info=False";

    using (SqlCeConnection conn = new SqlCeConnection(sqlcon))
    {
        conn.Open();

        SqlCeCommand cmd = new SqlCeCommand(@"Select data_type
    from information_schema.columns
    where table_name = 'OutgoingChequeRecords' and column_name = 'Amount'", conn);

        SqlCeDataReader reader = cmd.ExecuteReader();
                  
        while (reader.Read())
        {
            MessageBox.Show("Reading Started");

            for (int i = 0; i < reader.FieldCount; i  )
            {
                Type dataType = reader.GetFieldType(i);
                string columnName = reader.GetName(i); 

                if (dataType == typeof(int))
                {
                    // Do for integers (INT, SMALLINT, BIGINT)
                    MessageBox.Show("Type is INT");
                }
                else if (dataType == typeof(double))
                {
                    // Do for doubles (DOUBLE, DECIMAL)
                    MessageBox.Show("Type is Decimal");
                }
                else if (dataType == typeof(string))
                {
                    // Do for Strings (VARCHAR, NVARCHAR).
                    MessageBox.Show("Type is String");
                }
                else if (dataType == typeof(DateTime))
                {
                    // Do for DateTime (DATETIME)
                    MessageBox.Show("Type is DateTime");
                }
                else if (dataType == typeof(byte[]))
                {
                    // Do for Binary (BINARY, VARBINARY, NVARBINARY, IMAGE)
                    MessageBox.Show(columnName);
                }
               
                else if (dataType == typeof(float))
                {
                    MessageBox.Show("Type is Float");
                }    
            }
        }
        MessageBox.Show("Reading Stopped, Connection Closed");

        conn.Close();
    }   
}
 

Тип — строка

Комментарии:

1. Пожалуйста, поделитесь заявлением о СОЗДАНИИ ТАБЛИЦЫ

2. используйте корпус выключателя!

3. Таблица @ErikEJ уже существует, я проверяю случаи.

4. Фактическим типом данных data_type in information_schema.columns всегда будет строка имени типа данных для этого столбца. Так что вы можете просто вывести эту строку. Вы действительно должны использовать sys.columns вместо этого, потому information_schema.columns что это только для совместимости

Ответ №1:

вы можете просто запустить (string)cmd.ExecuteScalar(); и проверить его значение "int" . Я предполагаю, что во всех схемах есть только один столбец с одинаковым именем таблицы. Если их больше, то вы также можете добавить схему в состояние TABLE_SCHEMA = 'yourSchema'

Комментарии:

1. У меня есть 08 столбцов и его SQL Compact, соответствующий столбец — «Сумма», который является int, поэтому мне нужно изменить его на плавающий, если его int.

2. Я думаю, что ваше решение работает, я тестирую.

3. @NewDeveloper Я думаю, что мой ответ ответил на ваш первоначальный вопрос, не так ли? Изменение типа-это другой вопрос. Вы можете задать новый вопрос

4. Ваше решение работает: однако есть одна проблема, я получаю строку кода типа, как я могу преобразовать эту строку обратно в код типа, чтобы я мог использовать свои случаи переключения выше?

5. Я поддержал ваш ответ. Ваш ответ работает со строкой, но он не определяет тип данных, моя работа все еще завершена.

Ответ №2:

Не могли бы вы, пожалуйста, проверить это таким образом

 Type type = reader.GetFieldType(i);

switch (Type.GetTypeCode(type))
{
    case TypeCode.DateTime:
        break;
    case TypeCode.String:
        break;
    default: break;
}
 

Комментарии:

1. он обрывается на ниточке. Мой тип столбца «Сумма» — Int.

2. вы провели перекрестную проверку в базе данных, если возможно, можете ли вы напечатать имя столбца и ввести его, чтобы получить полную ясную картину?