Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Не работает вставка записи в БД MSSQL


Автор: Yagmort 24.11.2010, 17:46
Код

string zapr;
zapr="INSERT INTO [kirpich].[dbo].[T_DO] "+ 
          " ([dateF]" +
          " ,[id_f1]"+
          " ,[id_f2]" +
          " ,[id_f3]"+
          " ,[id_f4]"+
          " ,[intF1]"+
          " ,[intF2]"+
          " ,[floatF3]"+
          " ,[floatF4]"+
          " ,[floatF5]"+
          " ,[floatF6]"+
          " ,[floatF7]"+
          " ,[floatF8]"+
          " ,[floatF9]"+
          " ,[floatF10]) " +
          " VALUES "+
          "('" + Calendar1.SelectedDate.ToShortDateString() +"'" +
          "," + DropDownList1.Text + ""+
          "," + DropDownList2.Text + "" +
          "," + DropDownList3.Text + "" +
          "," + DropDownList4.Text + "" +
          "," + Convert.ToInt32(Textbox1.Text)+""+
          "," + Convert.ToInt32(Textbox2.Text)+ "" +
          "," + Convert.ToDouble(Textbox3.Text) + "" +
          "," + Convert.ToDouble(Textbox4.Text) + "" +
          "," + Convert.ToDouble(Textbox5.Text) + "" +
          "," + Convert.ToDouble(Textbox6.Text) + "" +
          "," + Convert.ToDouble(Textbox7.Text) + "" +
          "," + Convert.ToDouble(Textbox8.Text) + "" +
          "," + Convert.ToDouble(Textbox9.Text) + "" +
          "," + Convert.ToDouble(Textbox10.Text) +") GO ";

                Configuration gif = WebConfigurationManager.OpenWebConfiguration("/");
                ConSTR con = new ConSTR(config.ConnectionStrings.ConnectionStrings["STRINGCON"].ConnectionString);
                SqlConnection sqls = new SqlConnection(con);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(zapr, con);
                    SqlCommand command = new SqlCommand(zapr,sqls);
                    DataSet sets = new DataSet();
                    da.Fill(sets, "[T_DO]");
                    sqls.Open();    
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message.ToString());      
                 }
                finally
                {
                    sqls.Close();
                }

выпадает ошибка не могу найти ошибки
 //System.FormatException: Входная строка имела неверный формат.

"INSERT INTO [kirpich].[dbo].[T_DO] "+ // жалуется на эту строку

Автор: MasterOfCode 24.11.2010, 18:01
Yagmort, Вижу несколько слабых мест.
Первое:
В этой строке Convert.ToDouble(Textbox3.Text) и ей подобных, может возникнуть при вставке ошибка с разностью Decimal Separator на компьютере котором выполняется приложение и в настройках БД
Второе:
Опять же на эти строки, если разделитель запятая, то необходимо число заключать в апострофы. Чтоб БД поняла ваш запрос.
Третье:
Если значение DropDownList1.Text, строка, опять же, необходимо заключить в апострофы. И так по всем остальным значениям.
Четвертое:
Не понимаю, что вы хотите сделать выполняя этот блок если в переменной zapr у вас INSERT COMMAND:
Код

SqlDataAdapter da = new SqlDataAdapter(zapr, con);
SqlCommand command = new SqlCommand(zapr,sqls);
DataSet sets = new DataSet();
da.Fill(sets, "[T_DO]");
sqls.Open();

Во первых, сначало необходимо открыть коннект к БД, а вы его открываете после того, как пытаетесь выполнить заполнение датасета.
Во вторых для заполнения датасета нужно использовать обычный select
В третьих, если все же вам необходимо заполнять значения в БД, то для этого датасет не используют, достаточно сформировать инсерт в SqlCommand и сделать ExecuteNonQuery хотя бы.


Для начала откройте книжку и почитайте. Либо зайдите на MSDN, там множество экзамплов с которых вам есть чему поучится.

Автор: Yagmort 24.11.2010, 18:29
Цитата(MasterOfCode @ 24.11.2010,  18:01)
Yagmort, Вижу несколько слабых мест.
Первое:
В этой строке Convert.ToDouble(Textbox3.Text) и ей подобных, может возникнуть при вставке ошибка с разностью Decimal Separator на компьютере котором выполняется приложение и в настройках БД
Второе:
Опять же на эти строки, если разделитель запятая, то необходимо число заключать в апострофы. Чтоб БД поняла ваш запрос.
Третье:
Если значение DropDownList1.Text, строка, опять же, необходимо заключить в апострофы. И так по всем остальным значениям.
Четвертое:
Не понимаю, что вы хотите сделать выполняя этот блок если в переменной zapr у вас INSERT COMMAND:
Код

SqlDataAdapter da = new SqlDataAdapter(zapr, con);
SqlCommand command = new SqlCommand(zapr,sqls);
DataSet sets = new DataSet();
da.Fill(sets, "[T_DO]");
sqls.Open();

Во первых, сначало необходимо открыть коннект к БД, а вы его открываете после того, как пытаетесь выполнить заполнение датасета.
Во вторых для заполнения датасета нужно использовать обычный select
В третьих, если все же вам необходимо заполнять значения в БД, то для этого датасет не используют, достаточно сформировать инсерт в SqlCommand и сделать ExecuteNonQuery хотя бы.


Для начала откройте книжку и почитайте. Либо зайдите на MSDN, там множество экзамплов с которых вам есть чему поучится.

Да но я же перевожу из текста в Double, а в MSSQL сервере целые числа и числа с плавающей точкой можно не заключать в апострофы... И он жалуется на 1 строку... т.е. неправильный формат ((( как мне надо тогда отослать запрос, если он не работает у меня ? Есть правильный вариант ?

Автор: HellMasterHaiL 24.11.2010, 22:35
Сформированную строку запроса фстудию...
Есть подозрение на 
Код

"('" + Calendar1.SelectedDate.ToShortDateString() +"'" +


з.ы. если не ошибаюсь, открывть и закрывать коннекшен вручную не нужно, датасет это должен делать сам.

Автор: Yagmort 24.11.2010, 23:54
Цитата(HellMasterHaiL @ 24.11.2010,  22:35)
Сформированную строку запроса фстудию...
Есть подозрение на 
Код

"('" + Calendar1.SelectedDate.ToShortDateString() +"'" +


з.ы. если не ошибаюсь, открывть и закрывать коннекшен вручную не нужно, датасет это должен делать сам.

строку выше написал а сформулированную он мне не выдает т.к. не выполняет до конца запрос...

Автор: Yagmort 25.11.2010, 12:23
Цитата(MasterOfCode @ 24.11.2010,  18:01)
Yagmort, Вижу несколько слабых мест.
Первое:
В этой строке Convert.ToDouble(Textbox3.Text) и ей подобных, может возникнуть при вставке ошибка с разностью Decimal Separator на компьютере котором выполняется приложение и в настройках БД
Второе:
Опять же на эти строки, если разделитель запятая, то необходимо число заключать в апострофы. Чтоб БД поняла ваш запрос.
Третье:
Если значение DropDownList1.Text, строка, опять же, необходимо заключить в апострофы. И так по всем остальным значениям.
Четвертое:
Не понимаю, что вы хотите сделать выполняя этот блок если в переменной zapr у вас INSERT COMMAND:
Код

SqlDataAdapter da = new SqlDataAdapter(zapr, con);
SqlCommand command = new SqlCommand(zapr,sqls);
DataSet sets = new DataSet();
da.Fill(sets, "[T_DO]");
sqls.Open();

Во первых, сначало необходимо открыть коннект к БД, а вы его открываете после того, как пытаетесь выполнить заполнение датасета.
Во вторых для заполнения датасета нужно использовать обычный select
В третьих, если все же вам необходимо заполнять значения в БД, то для этого датасет не используют, достаточно сформировать инсерт в SqlCommand и сделать ExecuteNonQuery хотя бы.


Для начала откройте книжку и почитайте. Либо зайдите на MSDN, там множество экзамплов с которых вам есть чему поучится.

Код

",'" + Convert.ToDouble(Textbox7.Text) + "'" +

Ошибка при преобразовании типа данных varchar к float.
Код

"," + Convert.ToDouble("'"+Textbox4.Text+"'") + "" +

а если вот так, то Входная строка имела неверный формат.

Я сделал через функцию Replace помогло но все равно хотелось бы по другому

Автор: Любитель 28.11.2010, 17:49
Цитата(Yagmort @  24.11.2010,  17:46 Найти цитируемый пост)
          "," + DropDownList1.Text + ""+
          "," + DropDownList2.Text + "" +
          "," + DropDownList3.Text + "" +
          "," + DropDownList4.Text + "" +
          "," + Convert.ToInt32(Textbox1.Text)+""+
          "," + Convert.ToInt32(Textbox2.Text)+ "" +
          "," + Convert.ToDouble(Textbox3.Text) + "" +
          "," + Convert.ToDouble(Textbox4.Text) + "" +
          "," + Convert.ToDouble(Textbox5.Text) + "" +
          "," + Convert.ToDouble(Textbox6.Text) + "" +
          "," + Convert.ToDouble(Textbox7.Text) + "" +
          "," + Convert.ToDouble(Textbox8.Text) + "" +
          "," + Convert.ToDouble(Textbox9.Text) + "" +
          "," + Convert.ToDouble(Textbox10.Text) +") GO ";

Ужас. Используйте параметризованные запросы (хотя бы) - 2010-й год на дворе всё-таки...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)