Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2012, 15:12   #1
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию (sql) как в поле smalldatetime занести значение типа NULL ?

Добрый день. на форме есть 2 datetimePicker'a при сохранении в базу значения которых должны быть опущены если на соответствующих CheckBox'ах не стоят галочки. делаю так.
Код:
DvidDocFamily = (((frmIndCard)Application.OpenForms["frmIndCard"]).cbDVidDocFamily.Checked == true) ? ((frmIndCard)Application.OpenForms["frmIndCard"]).dtpDVidDocFamily.Text : null;
            DateKonecRab = (((frmIndCard)Application.OpenForms["frmIndCard"]).cbDateKonecRab.Checked == true) ? ((frmIndCard)Application.OpenForms["frmIndCard"]).dtpDateKonRab.Text : null;
проверяю если галочка стоит "дата выдачи документа" то присваиваю значение dateTimePickera в противном случае NULL. так же во 2м случае.
дальше запрос
Код:
string queryStringSave = "Insert into Family (Kodind,Kodf,Fam,Ima,Ot,Dr,Otn,Namepasp,Serpasp,Nompasp,Dvidpasp,Kemvidpasp," +
            "Mestrab,DateKonecRab,Projiv,Primech,Subs) values" +
            "('" + Kodind + "'," +
            "'" + Kodfamily + "'," +
            "'" + ((frmIndCard)Application.OpenForms["frmIndCard"]).txtFamFamily.Text + "'," +
            "'" + ((frmIndCard)Application.OpenForms["frmIndCard"]).txtImaFamily.Text + "'," +
            "'" + ((frmIndCard)Application.OpenForms["frmIndCard"]).txtOtFamily.Text + "'," +
            "'" + ((frmIndCard)Application.OpenForms["frmIndCard"]).dtpDrFamily.Text + "'," +
            "'" + (((frmIndCard)Application.OpenForms["frmIndCard"]).cbOtnosh.SelectedIndex + 1).ToString() + "'," +

            "'" + ((frmIndCard)Application.OpenForms["frmIndCard"]).cbDocFamily.Text + "'," +
            "'" + ((frmIndCard)Application.OpenForms["frmIndCard"]).txtSeriaDocFamily.Text + "'," +
            "'" + ((frmIndCard)Application.OpenForms["frmIndCard"]).txtNomerDocFamily.Text + "'," +
            DvidDocFamily + "," +
            "'" + ((frmIndCard)Application.OpenForms["frmIndCard"]).cbKemVidDocFamily.Text + "'," +

            "'" + ((frmIndCard)Application.OpenForms["frmIndCard"]).txtMestRab.Text + "'," +
            DateKonecRab + "," +
            "'" + ((frmIndCard)Application.OpenForms["frmIndCard"]).cbProjivFamily.Text + "'," +
            "'" + ((frmIndCard)Application.OpenForms["frmIndCard"]).txtPrimechFamily.Text + "','0')";
так вот когда они принимают значение NULL запрос не проходит он имеет вид:
Код:
Insert into Family (Kodind,Kodf,Fam,Ima,Ot,Dr,Otn,Namepasp,Serpasp,Nompasp,Dvidpasp,Kemvidpasp,Mestrab,DateKonecRab,Projiv,Primech,Subs) values('9225','1','ЫФВ','ФЫВ','ФЫВ','24.07.2012','9','','','',,'','',,'ПРОЖИВАЕТ','','0')
(выделил красным места где должны быть NULL) соответственно получаю ошибку "неправильный синтаксис около ',' ". каким образом мне загнать дату в таблицу либо NULL если дата не нужна.
PS mssqlserver 2000, поле с датами может принимать значения null (токо хз как их вставить туда)
ЗЫЫ конструкция типа
Код:
DvidDocFamily = (((frmIndCard)Application.OpenForms["frmIndCard"]).cbDVidDocFamily.Checked == true) ? ((frmIndCard)Application.OpenForms["frmIndCard"]).dtpDVidDocFamily.Text : DBNull.Value;
к сожалению тоже не может быть применена. был бы рад за любую помощ.
wm_leviathan вне форума Ответить с цитированием
Старый 24.07.2012, 16:59   #2
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

1. Параметры запросу нужно передавать через коллекцию Parameters Вашего адаптера. То как сделали Вы - моветон.
2. Если поле таблицы Allows Null, тогда используйте DBNull.Value, иначе что-то придется туда записать.
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть

Последний раз редактировалось Петррр; 24.07.2012 в 17:09.
Петррр вне форума Ответить с цитированием
Старый 24.07.2012, 17:06   #3
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

Цитата:
Сообщение от Петррр Посмотреть сообщение
1. Параметры запросу нужно передавать через коллекцию Parameters Вашего адаптера. То как сделали Вы - моветон.
2. Если поле таблицы Allows Null, тогда используйте DBNull.Value.
1 пробывал с параметрами да и щас до сих пор разбираюсь.
2 DbNULL.Value пробывал аналогично ничего не заносит все та же пустота.
wm_leviathan вне форума Ответить с цитированием
Старый 24.07.2012, 17:14   #4
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
using System;
using MySql.Data.MySqlClient;

class Program
{
    static void Main(string[] args)
    {
        MySqlConnection connection = new MySqlConnection("Server=localhost; Database=prog_test; Uid=root; Password=1");
        connection.Open();
        MySqlCommand command = new MySqlCommand("INSERT INTO test (_date) VALUES (@date);", connection);
        command.Parameters.Add("@date", MySqlDbType.Date).Value = DBNull.Value;
        command.ExecuteNonQuery();
        connection.Close();
    }
}
Код:
mysql> SELECT * FROM test;
+----+-------+
| id | _date |
+----+-------+
|  1 | NULL  |
+----+-------+
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 24.07.2012, 18:22   #5
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

спасибо большое Петррр с параметрами разобрался все работает хорошо. остался небольшой вопрос почему в сам запрос нельзя вставить NULL ? даже если я использую DvidDocFamily ?? DbNULL.Value все равно не вставляется.
ЗЫ DvidDocFamily значение null, тип object
wm_leviathan вне форума Ответить с цитированием
Старый 24.07.2012, 18:33   #6
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
INSERT INTO test (_date) VALUES (NULL);
Нужно в коде так и написать NULL, а не оставлять пустое место.
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 25.07.2012, 10:08   #7
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

нет вы наверно не правильно поняли запрос то понятно. но..
Код:
object DvidDocFamily, DateKonecRab;
            DvidDocFamily = (((frmIndCard)Application.OpenForms["frmIndCard"]).cbDVidDocFamily.Checked == true) ? ((frmIndCard)Application.OpenForms["frmIndCard"]).dtpDVidDocFamily.Text : null;
как видно здесь если я ставлю галочку на дата выдачи документа то переменной DvidDocFamily присваивается дата из DateTimePicker'a, если галка не стоит то этой переменной присваивается NULL. Далее идет запрос на сохранение в базу (приведу кусок только ибо длинноватый)
Код:
string queryStringSave = "Insert into Family (Kodind,Kodf,Fam,Ima,Ot,Dr,Otn,Namepasp,Serpasp,Nompasp,Dvidpasp,Kemvidpasp," +
            "Mestrab,DateKonecRab,Projiv,Primech,Subs) values" +
...

((frmIndCard)Application.OpenForms["frmIndCard"]).txtNomerDocFamily.Text + "'," +
            DvidDocFamily (или даже пытался так DvidDocFamily ??DbNULL.Value) + "," +
...
так вот переменная DvidDocFamily имеет значение Null проверяю отладчиком но в реале в базу null не вставляется
получается запрос вида
Код:
Insert into Family (Kodind,Kodf,Fam,Ima,Ot,Dr,Otn,Namepasp,Serpasp,Nompasp,Dvidpasp,Kemvidpasp,Mestrab,DateKonecRab,Projiv,Primech,Subs) values('9225','1','ИВАНОВ','ИВАН','ИВАНОВИЧ','25.07.2012','5','','','',,'','',,'ПРОЖИВАЕТ','','0')
и вот где я выделил красным должны быть NULL но там ничего нет пустота. отсюда разумеется я получаю ошибку "неправильный синтаксис около ',' ". и вот собственно мучает вопрос а почему я не могу вставить null ? даже если я в запросе указываю не переменную с null значением а DbNull.Value все равно то же самое получается.
неужели использование параметризованного запроса остается единственным выходом из ситуации ?

Последний раз редактировалось wm_leviathan; 25.07.2012 в 10:14.
wm_leviathan вне форума Ответить с цитированием
Старый 25.07.2012, 15:07   #8
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

вам же сказали пишите NULL в запросе буквами не в кавычках.
типо
Код:
Insert into Family (Kodind,Kodf,Fam,Ima,Ot,Dr,Otn,Namepasp,Serpasp,Nompasp,Dvidpasp,Kemvidpasp,Mestrab,DateKonecRab,Projiv,Primech,Subs) values('9225','1','ИВАНОВ','ИВАН','ИВАНОВИЧ','25.07.2012','5','','','',NULL,'','',NULL,'ПРОЖИВАЕТ','','0')
типо
Код:
a!=null?string.format("'{0}'",a):"NULL"+","
и еще ""+null=="" все верно
Reskov вне форума Ответить с цитированием
Старый 26.07.2012, 09:34   #9
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

благодарю всех как то просто про null не подумал
wm_leviathan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из простого мемо записать в поле БД Access в поле тоже типа мемо с сохранением всех абзацев пробелов Speeker БД в Delphi 2 28.11.2011 16:22
SQL запрос. Не выводит строки, где в одном поле присутствует NULL, хотя идет проверка lyle_200490 SQL, базы данных 7 07.04.2011 22:41
Как занести картинку в BLOB-поле? simka16 Общие вопросы Delphi 0 16.01.2011 14:49
Как занести значение в ячейку segail Microsoft Office Excel 1 10.07.2009 20:00
присвоить переменной целого типа значение поля key полученное в результате выполнения SQL запроса Worms БД в Delphi 5 10.01.2008 21:07