Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / value of type 'date' cannot be converted to System.Data.SqlClient. / 25 сообщений из 43, страница 1 из 2
03.08.2004, 13:16
    #32633167
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
в коде при присвоении параметру значения переменной ParametrDate, подчеркивается эта переменная.
в пояснении написано, что
value of type 'date' cannot be converted to System.Data.SqlClient.
Что не так с типом?

ниже приведен код, в котором эта самая переменная как бы выделена красным (как бы потому как она стоит только в тегах и без красного цвета)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Public Sub UpdateParametr(ByRef ParametrName As String, ByRef ParametrInt As Short, ByRef ParametrDate As DateTime, ByRef ParametrStr As String)
        dacmdParametrs.SelectCommand = New System.Data.SqlClient.SqlCommand()
        dacmdParametrs.UpdateCommand = New System.Data.SqlClient.SqlCommand()

        dacmdParametrs.UpdateCommand.CommandText = "update tglobal set parametr_name=@parametr_name, parametr_value_int=@parametr_value_int, parametr_value_date=@parametr_value_date, parametr_value_string=@parametr_value_string where (parametr_name=@parametr_name) And (parametr_value_int=@parametr_value_int) And (parametr_value_date=@parametr_value_date) And (parametr_value_string=@parametr_value_string)"
        dacmdParametrs.UpdateCommand.Connection = SqlConnection1

        dacmdParametrs.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@parametr_name", System.Data.SqlDbType.VarChar,  50 , "parametr_name"))
        dacmdParametrs.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@login_user", System.Data.SqlDbType.VarChar,  50 , "login_user"))
        dacmdParametrs.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@parametr_value_int", System.Data.SqlDbType.Int,  0 , "parametr_value_int"))
        dacmdParametrs.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@parametr_value_date", System.Data.SqlDbType.DateTime,  8 , "parametr_value_date"))
        dacmdParametrs.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@parametr_value_string", System.Data.SqlDbType.VarChar,  50 , "parametr_value_string"))


        dacmdParametrs.SelectCommand.CommandText = "SELECT parametr_value_int, parametr_value_date, parametr_value_string, login_user, parametr_name FROM TGlobal WHERE (parametr_name like @parametr_name) AND (login_user like @login_user)"
        dacmdParametrs.SelectCommand.Connection = SqlConnection1
        dacmdParametrs.SelectCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@parametr_name", System.Data.SqlDbType.VarChar,  50 , "parametr_name"))
        dacmdParametrs.SelectCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@login_user", System.Data.SqlDbType.VarChar,  50 , "login_user"))

        dacmdParametrs.SelectCommand.Parameters("@parametr_name").Value = ParametrName
        dacmdParametrs.SelectCommand.Parameters("@login_user").Value = myuser


        dacmdParametrs.Fill(dscmdParametrs)

        If (dscmdParametrs.Tables( 0 ).Rows.Count =  0 ) Then
           ...
        Else
            If Not IsNothing(ParametrInt) Then
                dacmdParametrs.UpdateCommand.Parameters("@parametr_name").Value = ParametrName
            End If
            If Not IsNothing(ParametrDate) Then
                dacmdParametrs.UpdateCommand.Parameters("@parametr_value_date") = [color=red]ParametrDate[/color]
            End If
            If Not IsNothing(ParametrStr) Then
               dacmdParametrs.UpdateCommand.Parameters("@parametr_value_string") = ParametrStr
            End If
        End If

        dacmdParametrs.Update(dscmdParametrs)
    End Sub
...
Рейтинг: 0 / 0
03.08.2004, 13:37
    #32633256
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
Извините, вопрос снимается
Наконец-то я увидела, что забыла написать .Value
...
Рейтинг: 0 / 0
03.08.2004, 14:05
    #32633335
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
:(
код-то теперь без ошибок, а вот рез-т выполнения его я не вижу.
может я что-то не так написала?
этот код находится в модуле и вызывается на клик кнопки на форме таким образом:
Module1.UpdateParametr("glbArcBeginDate", 0, DateTimePicker1.Value, "")
Module1.UpdateParametr("glbArcEndDate", 0, DateTimePicker2.Value, "")

Я не пойму почему после его выполнения в таблице (в базе) ничего не меняется.
...
Рейтинг: 0 / 0
03.08.2004, 14:12
    #32633358
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
1) Что выдаст MsgBox перед Update:
Код: plaintext
1.
2.
MsgBox(dscmdParametrs.HasChanges)
dacmdParametrs.Update(dscmdParametrs)

2) Проверьте в дебаг режиме все параметры передаваемые Update. И попробуйте выполнить такой же Update на QA только уже вручную подставленными параметрами.
Код: plaintext
1.
"update tglobal set parametr_name=@parametr_name, parametr_value_int=xx, parametr_value_date=xx, parametr_value_string=xx where .........

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
03.08.2004, 14:14
    #32633373
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
Стоп, я что то не понял, так и не будет работать.
Вам надо просто выполнить Update ????
Если да то DataAdapter вообще не нужен. Просто выполняйте свой UpdateCommand
Код: plaintext
1.
cmd.ExecuteNonQuery() ' где cmd ваш UpdateCommand

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
03.08.2004, 15:11
    #32633532
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
исправила на execute, пока все еще не добавляется в таблицу...
а по поводу этой строки
dacmdParametrs.Fill(dscmdParametrs)
...
по логике, это должно быть через адаптер в дадасет (как у меня и написано), потому как потом я просматриваю в сете выбранную запись и редактирую ее, правильно я понимаю?
...
Рейтинг: 0 / 0
04.08.2004, 07:48
    #32634215
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
исправила на execute, пока все еще не добавляется в таблицу...
а по поводу этой строки
dacmdParametrs.Fill(dscmdParametrs)
...
по логике, это должно быть через адаптер в дадасет (как у меня и написано), потому как потом я просматриваю в сете выбранную запись и редактирую ее, правильно я понимаю?

Но мы насколько я понимаю говорим не про Fill, а про Update и в этом случае можно обойтись без DataAdapter, так как вы решили передавать все параметры в UpdateCommand вручную.

Представьте DDL скрипт таблицы tglobal

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
04.08.2004, 09:37
    #32634310
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
я так понимаю, вы попросили структуру таблицы (sql скрипт):
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE [dbo].[TGlobal] (
	[parametr_name] [varchar],
	[login_user] [varchar] ( 50 ),
	[parametr_value_int] [int] NULL ,
	[parametr_value_date] [datetime] NULL ,
	[parametr_value_string] [varchar] ( 256 ) NULL )
да мы, действительно говорим про Update просто может причина моей ошибки гораздо раньше, поэтому я уточнила про строку Fill.
...
Рейтинг: 0 / 0
04.08.2004, 09:44
    #32634326
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
самое интересное, что тот код, кот написан в if после Else -
рез-т его действия не отражается в таблице, но также и для кода, кот написан до Else (его приведу чуть ниже)
Суть такая:
Если ни одной записи не занесено в сет, тогда выполняется код для добавления новой записи, а если условие удовлетворяется, тогда выполняется код, после Else
Вырезка из обработчика с if:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
If (dscmdParametrs.Tables( 0 ).Rows.Count =  0 ) Then
            Dim drDiscount As DataRow
            drDiscount = dscmdParametrs.Tables( 0 ).NewRow
            drDiscount.Item("parametr_name") = ParametrName
            drDiscount.Item("login_user") = myuser
            If Not IsNothing(ParametrInt) Then
                drDiscount.Item("parametr_value_int") = ParametrInt
            End If
            If Not IsNothing(ParametrDate) Then
                drDiscount.Item("parametr_value_date") = ParametrDate
            End If
            If Not IsNothing(ParametrStr) Then
                drDiscount.Item("parametr_value_string") = ParametrStr
            End If
            dscmdParametrs.Tables( 0 ).Rows.Add(drDiscount)
            SqlConnection1.Close()

        Else
            dacmdParametrs.UpdateCommand.Parameters("@login_user").Value = myuser
            dacmdParametrs.UpdateCommand.Parameters("@parametr_name").Value = ParametrName
            If Not IsNothing(ParametrInt) Then
                               dacmdParametrs.UpdateCommand.Parameters("@parametr_value_int").Value = ParametrInt
            End If
            If Not IsNothing(ParametrDate) Then
                                dacmdParametrs.UpdateCommand.Parameters("@parametr_value_date").Value = ParametrDate
            End If
            If Not IsNothing(ParametrStr) Then
                                dacmdParametrs.UpdateCommand.Parameters("@parametr_value_string").Value = ParametrStr
            End If
            SqlConnection1.Open()
            dacmdParametrs.UpdateCommand.ExecuteNonQuery()
            SqlConnection1.Close()
        End If
...
Рейтинг: 0 / 0
04.08.2004, 10:16
    #32634406
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
Irinka, а, знаете от чего все Ваши беды?
Просто делайте точку останова на проблемной строке, а потом с помощью F8 продвигайтесь по коду занося при необходимости в Watch интересующие Вас переменные... Глядишь и станет ясно, где спрятана ошибка. Может какая то часть кода вообще не выполняется... Или ещё что...
P.S. Это не критика, а совет... Мне, например ОЧЕНЬ помогает в решении подобного рода проблем.
...
Рейтинг: 0 / 0
04.08.2004, 10:26
    #32634435
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 If (dscmdParametrs.Tables( 0 ).Rows.Count =  0 ) Then
            Dim drDiscount As DataRow
            drDiscount = dscmdParametrs.Tables( 0 ).NewRow
            drDiscount.Item("parametr_name") = ParametrName
            drDiscount.Item("login_user") = myuser
            If Not IsNothing(ParametrInt) Then
                drDiscount.Item("parametr_value_int") = ParametrInt
            End If
            If Not IsNothing(ParametrDate) Then
                drDiscount.Item("parametr_value_date") = ParametrDate
            End If
            If Not IsNothing(ParametrStr) Then
                drDiscount.Item("parametr_value_string") = ParametrStr
            End If
            dscmdParametrs.Tables( 0 ).Rows.Add(drDiscount)
            SqlConnection1.Close()
Здесь, кстати, ничего и не добавиться -
1. не открыт Connection, а Вы его ещё и закрываете,
2. если уж хотите , что бы изменение отражалось в таблице, то делайте Adapter.Update(dscmdParametrs, "YourTableName"), после добавления новых строк
3. ...and etc.
...
Рейтинг: 0 / 0
04.08.2004, 10:26
    #32634442
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
vladgrig, спасибо за совет.
Я пробегала уже строки в вотче. Но вот что интересно, я , наверное не совсем понимаю вотч Нета, в VB6 было как на ладони.
Может вы меня вразумите :)
Вот я решила проверить, а что же за таблица есть в сете и вставила в вотч такую строку
dscmdParametrs.Tables
Скажите, я должна где-то там увидеть имя таблицы или нет и какой у нее Item в сете?
Пораскрывала всевозможные плюсы и ничего подобного не видела.
Заранее спасибо.
...
Рейтинг: 0 / 0
04.08.2004, 10:28
    #32634448
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
Sa
Спасибо большое вам за помощь, выручили по многим вопросам :)
...
Рейтинг: 0 / 0
04.08.2004, 11:01
    #32634539
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
по поводу Connection, он открыт был раньше, так что с ним все нормально
...
Рейтинг: 0 / 0
04.08.2004, 12:54
    #32634864
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
irinka
я так понимаю, вы попросили структуру таблицы (sql скрипт):

Да это и называется DDL скрипт

vladgrig
если уж хотите , что бы изменение отражалось в таблице, то делайте Adapter.Update(dscmdParametrs, "YourTableName"), после добавления новых строк

Здесь надо разделять.
Либо мы делаем Update сами вручную, либо обучаем DataAdapter делать Update.

irinka пошла путем ручного формирования запроса для Update . Поэтому DataAdapter в этой процедуре и не нужен совсем.

Во первых я не пойму для чего тут Fill и Update т.е это здесь явно лишнее:
Код: plaintext
1.
2.
3.
dacmdParametrs.Fill(dscmdParametrs)
 'bla-bla-lba 
dacmdParametrs.Update(dscmdParametrs)
Также не понятно для чего здесь такой if. В общем опишите подробно задачу применительно к этому моменту, что хотите получить в итоге, что имеем на входе.

Плюс ко всему попробуйте это:
Sa
2) Проверьте в дебаг режиме все параметры передаваемые Update. И попробуйте выполнить такой же Update на QA только уже вручную подставленными параметрами.
Код: plaintext
1.
"update tglobal set parametr_name=@parametr_name, parametr_value_int=xx, parametr_value_date=xx, parametr_value_string=xx where ........


Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
04.08.2004, 12:59
    #32634883
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
автор
vladgrig
2. если уж хотите , что бы изменение отражалось в таблице, то делайте Adapter.Update(dscmdParametrs, "YourTableName"), после добавления новых строк


можно глупый вопрос?
Чтобы сделать апдейт при встаке новой записи мне нужно дописать InsertCommand. А что нужно поставить в Values() этого команда?
мне немножко не понятно.
потому как для UpdateCommand я явно присваивала значения пар-рам, а здесь через drDiscount (который объявлен как DataRow)
...
Рейтинг: 0 / 0
04.08.2004, 13:04
    #32634905
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
irinka
Чтобы сделать апдейт при встаке новой записи мне нужно дописать InsertCommand. А что нужно поставить в Values() этого команда?
мне немножко не понятно.
потому как для UpdateCommand я явно присваивала значения пар-рам, а здесь через drDiscount (который объявлен как DataRow)

Для UpdateCommand вы делали неправилно, чтобы посмотреть как надо делать правильно и для InsertCommand "натравите" data wizard на создание SqlDataAdapter для вашей таблицы, и выдергивайте весь получаемый код себе в процедуру, тогда сам DataAdapter будет уметь правильно формировать все запросы к СУБД, на основе данных DataSet. Т.е. строка DataAdapter.Update(myDataSet) будет уместна.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
04.08.2004, 13:15
    #32634939
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
Суть такова:
в таблице хранится логин, имя пар-ра и время когда пользователь работал с формой (форма, на кот как раз два календаря) и эти все значения соот-но должны внестись в табл автоматически (должно быть прописано программно, над этим кодом как раз и карпеем)
Теперь что в коде:
Там есть селекткомманд, в котором как раз прописано выбрать запись при условии что login_user - это данный пользоваель, кот вошел в данную программу, и parametr_name - это имя пар-ра glbArcBeginDate или glbArcEndDate, имена пар-ров которым соот-ют значения в поле parametr_value_date (начальня и конечная даты, выбранных в календарях на форме)
Далее заполняется датасет и если запись выбрана, тогда мы ее обнавляем (т е для найденного login_user и parametr_name меняем значение parametr_value_date ), а если не найдено, то добавляем пользователя пар-ры и даты, кот он выбрал.
Соот-но сет нужен, чтоб можно было выбрать, просмотреть и обновить.
Может я не права?
...
Рейтинг: 0 / 0
04.08.2004, 13:20
    #32634960
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
я правильо поняла, вот эта строка неправильная
dacmdParametrs.UpdateCommand.Parameters("@parametr_value_string").Value = ParametrStr
???
или самая первая часть, когда я объявляю адаптер, потом его комманды?
Я как раз смотрела по др форме и аналогично делала.
...
Рейтинг: 0 / 0
04.08.2004, 13:27
    #32634986
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
только я смотрела на форму, где не sqldataadapter, а oledbdataadapter
...
Рейтинг: 0 / 0
04.08.2004, 13:36
    #32635018
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
авторпо поводу Connection, он открыт был раньше, так что с ним все нормально
А, зачем здесь тогда вот это?
Код: plaintext
1.
2.
3.
4.
  
SqlConnection1.Open()
dacmdParametrs.UpdateCommand.ExecuteNonQuery()
SqlConnection1.Close()
...
Рейтинг: 0 / 0
04.08.2004, 13:36
    #32635019
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
далее
я имею в виду, что не пойму что писать в InsertCommand.CommandText="insert into tglobal Values(что писать здесь)"
если я использую drDiscount или вообще так нельзя?
...
Рейтинг: 0 / 0
04.08.2004, 14:07
    #32635093
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
Код: plaintext
insert into tglobal(имя_поля) Values(значение)"

Magnus
...
Рейтинг: 0 / 0
04.08.2004, 14:15
    #32635118
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
Magnus23


спасибо :)
но а если серьезно...
dacmdParametrs.UpdateCommand.CommandText = "update tglobal set parametr_name=@parametr_name..."

а здесь что
dacmdParametrs.UpdateCommand.CommandText = "insert into tglobal values( drDiscount.Item("parametr_name") , ...)
не так же писать

По поводу вашего уточнения...

можно писать и так:
insert into tglobal values(ла ла ла) без перечисления полей, если мы будем заносить значения во все поля, кот есть в табл
...
Рейтинг: 0 / 0
04.08.2004, 14:24
    #32635138
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
value of type 'date' cannot be converted to System.Data.SqlClient.
Параментры нужны если используется хранимка, а в данном случае можно просто ставить значения

dacmdParametrs.InsertCommand.CommandText = "insert into tglobal values("& drDiscount.Item("parametr_name") , ...&")"

можно писать и так:
insert into tglobal values(ла ла ла) без перечисления полей, если мы будем заносить значения во все поля, кот есть в табл
Можно, но хорошей практикой считается указывать обновляемые поля.
Таблица ведь может изменится. Да и при дебаге удобнее, не лазить же каждый раз в базу чтобы посмотреть какие поля получают значения.

Magnus
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / value of type 'date' cannot be converted to System.Data.SqlClient. / 25 сообщений из 43, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]