Совместимость с типом данных SQL Server - PullRequest
0 голосов
/ 14 августа 2011

Есть ли способ проверить, совместима ли какая-либо строка с каким-либо типом MS SQL? Я собираюсь проверить строки перед тем, как вставить их в таблицы в базе данных.

РЕДАКТИРОВАТЬ: я ищу метод, чтобы проверить, совместима ли какая-либо строка с varchar, char, bit, и т.д ...

1 Ответ

4 голосов
/ 14 августа 2011

Если я правильно интерпретирую это, у вас есть входные данные в виде строк, которые вы хотите сохранить в базе данных SQL Server, и столбцы будут разных типов, таких как int, float и money. Вы хотите знать, будут ли строки успешно преобразованы в соответствующий тип.

Один из способов - просто передать строки в качестве параметров в SqlCommand с помощью параметризованного запроса , задав соответствующие типы данных SQL для ваших параметров. Когда вы выполните команду с данными, которые не будут преобразованы, вы получите FormatExceptions.

Более конкретно, вы можете попытаться проанализировать ваши строки с соответствующим типом данных SQL. Если преобразование завершится неудачно, оно также выдаст FormatException.

Даже если вы анализируете строки, я все равно рекомендую использовать параметризованный SQL-запрос с SqlCommand или, что еще лучше, со строго типизированным слоем ORM, таким как Entity Framework. EF автоматически сопоставляет типы SQL с типами .Net, поэтому у вас будет автоматическая проверка типов данных, если вы попытаетесь присвоить несовместимое значение одному из свойств вашей сущности.

Код для разбора типов данных SQL:

try 
{
    // throws FormatExcpetion
    System.Data.SqlTypes.SqlInt16 i = System.Data.SqlTypes.SqlInt16.Parse("test"); 
}
catch (FormatException)
{
    // handle it
}

try 
{
    // i will be set to 10
    System.Data.SqlTypes.SqlInt16 i = System.Data.SqlTypes.SqlInt16.Parse("10"); 
}
catch (FormatException)
{
    // handle it
}
...