2013-12-21 3 views
1

Я попробовал этот код (ASP CLASSIC):Как проверить, если поле может содержать NULL (adFldIsNullable)

Public Function IsNullable(MyField) 
    Dim RS, SQL, Tmp 
    SQL = "SELECT " & MyField & " FROM mytable WHERE 1;" 
    Set RS = Server.CreateObject("ADODB.Recordset") 
    RS.Open SQL, conn 'I have connection opened elsewhere, using Driver={MySQL ODBC 5.2w Driver} 

    'Now check for Attributes 
    Tmp = RS.Fields(MyField).Attributes 
    IsNullable = 0 <> (Tmp And adFldIsNullable) '0x20 
    RS.Close 
    Set RS = Nothing 
End Function 

Функция работает нормально, но иногда результат является неправильным. Например, он возвращает значение True для поля ID, которое, безусловно, не является нулевым, поскольку оно является основным индексом индекса. Как я могу сделать его relable ?? Благодаря

Добавлено: Похоже, когда столбец устанавливается в AutoIncrement NOT NULL, то функция работает неправильно ...

ответ

1

Это дизайн в соответствии с http://bugs.mysql.com/bug.php?id=3857

[21.07.2004 22:26] Тимоти Смит (старший техник поддержки в те дни)

Это потому, что MySQL сообщает значение DEFAULT для такого столбца, как NULL. Это означает, что если вы
вставьте в столбец значение NULL, вы получите следующее целочисленное значение для таблицы
счетчик auto_increment.

Он по-прежнему действителен и решение @ kordirko вполне приемлемо.

+0

Это именно то, что я искал. Я не могу голосовать, так как я здесь зеленый. Я могу жить без проверки колонки ID ... Спасибо. – Combinatix

1

В MySql вы можете запросить information_schema.columns вид:

SELECT is_nullable 
FROM information_schema.columns 
WHERE table_schema = 'my_schema' 
    AND table_name = 'table-name' 
    AND column_name = 'column name' 

посмотреть демо: http://www.sqlfiddle.com/#!2/743d6/3

+1

Я уверен, что этот метод будет работать, спасибо. Но что, если я не могу/не хочу использовать information_schema? – Combinatix

+0

Information_schema - стандарт ANSI -> http://en.wikipedia.org/wiki/Information_schema, многие базы данных реализуют его, поэтому это самый простой способ запроса метаданных базы данных. Если вам это не нравится, ну, я действительно не знаю другого. Mayby dig в документации ADO.NET, я не знаю ADO.NET, и я не могу помочь, но я уверен, что у них есть некоторые функции для запроса метаданных таблицы, например, я нашел это: http: // stackoverflow .com/questions/457485/ado-net-get-table-definition-from-sql-server-tables – krokodilko

Смежные вопросы