Рейтинг:
15
Maciej Los
Попробовать это:
Dim originDate As DateTime = DateTimePickerFixCosts1.Value
Dim result1 As DateTime = originDate.AddMonths(MonthssToAdd)
КСТАТИ:
1) Не используйте ADODB внутри VB.NET-да. Воспользуйся
ADO.NET[
^] вместо этого!
2) Не используйте сцепленный текст для построения запроса. Воспользуйся
параметризованный запрос[
^] вместо этого, потому что ваш код
SQL-инъекция[
^] уязвимый!
Окончательно:
Dim dt As DataTable = New DataTable()
Try
Using connection As New SqlConnection("ConnectionStringHere")
conection.Open()
Using command As New SqlCommand("commandTextHere", connection)
Using reader As SqlDataReader = command.ExecuteReader()
dt.Load(reader)
End Using
End Using
End Using
Catch Ex As Exception
Console.WriteLine(Ex.Message)
End Try
If dt.Rows.Count=0 Then
'something went wrong!
End If
Удачи вам!
Member 13410460
Спасибо вам за Ваш ответ Мацей Лос, я попробую это сделать и дам вам знать о результатах.
Рекорды
Maciej Los
Всегда пожалуйста!
Member 13410460
Привет еще раз, я провел некоторое исследование того, что вы сказали, и я увидел, что "параметризованные запросы" используют команды SQL, которые я тоже не очень хорошо знаю, я знаю основы, но я не знаю, как соединить 5 значений, которые должны быть вставлены с текстовым полем чисел ('result1').
Maciej Los
Не могли бы вы уточнить? Я не понимаю эту часть: "как соединить 5 значений, которые нужно вставить с текстовым полем чисел ('result1')."
Member 13410460
Извините, если я не понимаю, что английский не является моим родным языком, поэтому, когда я заглянул в коды, я понял, как я мог это сделать, и это код (sqlcommand) :
строка sqlText = "вставить в расходы" +
"SET Description = '" + txtItemDescFixCost.Текст + "', " +
"SET Payment = '" + txtPaymentFIxCost.Текст + "', " +
"SET Price = '" + txtPriceFixCost.Текст + "', " +
"Дата =" + datetimepicker1.Текст + "" +
"WHERE ID =" + Val(txtID.text);
А теперь в этой части, где или как я должен вставить "result1".
Еще раз благодарю вас за ваше терпение.
Maciej Los
Sql-запрос должен выглядеть так:
Dim sqlText As String = "UPDATE Expenses SET [Description] = @description, Payment = @payment, Price = @price, [Date] = @date WHERE ID = @id"
Далее вы должны добавить параметры в команду:
command.Parameters.Add(new SqlParameter("@description", txtItemDescFixCost.Text))
command.Parameters.Add(new SqlParameter("@payment", txtItemDescFixCost.Text))
command.Parameters.Add(new SqlParameter("@price", txtPriceFixCost.Text ))
command.Parameters.Add(new SqlParameter("@date", datetimepicker1.Value))
command.Parameters.Add(new SqlParameter("@id", txtID.text))
Наконец, вы должны позвонить
command.ExecuteNonQuery()
метод обновления вашей базы данных.
Dim rowsafected = command.ExecuteNonQuery()If rowsafected = 0 Then
'update failed!
Else
'success!
End If
Member 13410460
Спасибо вам за то, что вы написали код, очень любезно с вашей стороны, но этот код, который вы написали, делает то же самое, что и тот, который написал Я, но делает это в ado.net путь, но это не ответит на мой первоначальный вопрос, который заключается в том, как я могу вставлять эти значения каждый месяц в течение 5 лет автоматически.
Maciej Los
Вам нужно использовать цикл ;)
Dim startdate As DateTime = datetimepicker1.Value
Dim enddate As DateTime = startdate.AddYears(5);
Do While (startdate<=enddate)
'your insert code here
'query = "INSERT INTO TableName (Field1, Field2,... FieldN) VALUES (@param1, @param2, ... @paramN)"
'add parameters here
startdate = startdate.AddMonths(1)
Loop
Member 13410460
Я попробую это прямо сейчас и дам вам знать о результатах, большое вам спасибо.
Member 13410460
Это то, что я пытался сделать, и это не показывает мне вообще, даже ошибки:
Dim dt As DataTable = новый DataTable()
Дим начальная дата как datetime = DateTimePickerFixCosts1.Значение
Dim enddate As DateTime = startdate.AddMonths(txtNumberofMonths.Text)
Попробуй
Использование соединения в качестве нового SqlConnection("Provider = sqloledb;Data Source=ELVIS\SQLEXPRESS;Initial Catalog=Expenses;Trusted_Connection=yes;")
соединение.Открыть()
Делать пока (начальная дата &ЛТ;= конечная дата)
Используя команду как новая команда sqlcommand("обновление Test_Table набор [описание] = @Описание, оплата = @оплата, цена = @цена, [дата] = @дата где ID = @ID в", соединения)
Использование reader в качестве команды SqlDataReader=.Метода executereader()
команда.Параметры.Добавить(новый SqlParameter ("@description", TxtItemDescFixCosts.Text))
команда.Параметры.Добавить(новый SqlParameter ("@payment", TxtPaymentFixCosts.Text))
команда.Параметры.Добавить(новый SqlParameter ("@price", txtPriceFixCosts.Text))
команда.Параметры.Add(New SqlParameter ("@date", DateTimePickerFixCosts1.Value))
команда.Параметры.Добавить(новый SqlParameter ("@id", TxtIDFixCosts.Text))
dt.Load(считыватель)
startdate = начальная дата.AddMonths(txtNumberofMonths.Text)
Dim rowsafected = команда.Метод executenonquery()
Если rowsafected = 0, то
- обновление не удалось!
Еще
- успех!
Конец, Если
Конец Использования
Конец Использования
Петля
Конец Использования
Поймать Ex Как Исключение
Приставка.WriteLine(Напр.Сообщение)
Конец Попытки
Если dt.строки.Количество = 0 Тогда
- что-то пошло не так!
Конец, Если
Maciej Los
Как я уже упоминал в своем предыдущем комментарии, чтобы вставить, обновить или удалить, вам нужно использовать метод ExecuteNonQuery. Пожалуйста, внимательно прочтите мои слова. Чтобы захватить данные (select), вы должны использовать метод ExecuteReader.
Member 13410460
Извините, я не очень хорошо знаком с этим ado.net-сегодня мой первый день, когда я это делаю. Я постараюсь все исправить. Спасибо
Member 13410460
например, я изменил на это, это метод Exectutenonquerry :
команда.Параметры.AddWithValue ("@description", TxtItemDescFixCosts.Text)
команда.Параметры.AddWithValue ("@payment", TxtPaymentFixCosts.Text)
команда.Параметры.AddWithValue ("@price", txtPriceFixCosts.Text)
команда.Параметры.AddWithValue ("@date", DateTimePickerFixCosts1.Value)
команда.Параметры.AddWithValue ("@id", TxtIDFixCosts.Text)
Все еще не работает
Maciej Los
Что значит "не работает"? Вы проверяли наличие записей?
Member 13410460
Да, я так и сделал. Может быть, есть другой способ ?
Maciej Los
Была ли ваша база данных обновлена или нет? Какая у вас строка подключения?
Есть много вещей, которые нужно проверить.
Member 13410460
Здравствуйте, Итак, я изменил свой код, просто в качестве теста я попробовал этот, и он дает мне бесконечные записи в моей таблице данных, что я делаю не так?
Дим начальная дата как datetime = DateTimePickerFixCosts1.Текст
Dim enddate As DateTime = startdate.AddMonths(Конвертировать.ToInt32(txtNumberofMonths.Text))
'Dim enddate As DateTime = startdate.AddMonths(txtNumberofMonths.Text)
Const query As String = "вставить в Test_Table(дата,описание,оплата,Количество,Цена,отдел,статус) значения (@date,@description,@payment,@quantity,@price,@department,@status)"
Делать пока (начальная дата &ЛТ;= конечная дата)
Использование conn в качестве SqlConnection = New SqlConnection("источник данных=####\SQLEXPRESS;начальный каталог=расходы;Trusted_Connection=yes;")
Использование команды As SqlCommand = New SqlCommand(query, conn)
команда.Параметры.AddWithValue ("@description", TxtItemDescFixCosts.Text)
команда.Параметры.AddWithValue ("@payment", TxtPaymentFixCosts.Text)
команда.Параметры.AddWithValue ("@price", txtPriceFixCosts.Text)
команда.Параметры.AddWithValue ("@date", DateTimePickerFixCosts1.Value)
команда.Параметры.AddWithValue ("@status", ComboBox1.Text)
команда.Параметры.AddWithValue ("@quantity", TextBoxIDd.Text)
команда.Параметры.AddWithValue ("@department", TxtFixCosts.Text)
Коннектикут.Открыть()
команда.ExecuteNonQuery() ' NB: не используйте ExecuteReader, когда запрос ничего не возвращает!
Конец Использования
Конец Использования
Петля
Пожалуйста помочь,
Благословения