Официальный сайт студ.городка НГТУ
Программирование и БД » Синтаксис "INSERT INTO..." в VB.net 

#1  10.12.05 21:05

Синтаксис "INSERT INTO..." в VB.net

Проблема в следующем..
Есть функция

Код: vb.net:

Public Sub CreateSqlConnection(ByVal data1 As Char, ByVal data2 As Char, ByVal data3 As String, ByVal data4 As String, ByVal data5 As String)
        Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;" & _
                                                      "Initial Catalog=DIA_BASE")
        nwindConn.Open()
 
        Dim insertStr As String = "INSERT INTO T_Firm (FirmName, FirmFullName,FirmAddress,FirmPhone,[FirmE-mail]) Values(date1, data2, data3, data4, data5)"
 
        Dim insertCMD As SqlCommand = New SqlCommand(insertStr, nwindConn)
        insertCMD.ExecuteNonQuery()
 
 
        nwindConn.Close()
 
    End Sub

data1, data2,..data3 - переменные, но SQL такой синтаксис не понимает... если писать в 'data1' ковычках то он просто вписывает в поле таблицы как значение..
вопрос какой синтаксис дожен быть что бы в таблицу вписывать не железно вписанные данные INSERT INTO Tabl(fild1,fild2) VALUES ('значение1','значение2')
а значения формируемые динамически(значение любой переменной)

Исправлено eagle (10.12.05 21:21)

Offline

#2  10.12.05 21:21

Re: Синтаксис "INSERT INTO..." в VB.net

генерируй запрос перед его исполнением и вписывай в запрос не имена переменных а их значения!

Offline

#3  11.12.05 13:32

Re: Синтаксис "INSERT INTO..." в VB.net

2eagle: стыдно такие вопросы задавать !
во первых есть MSDN в том числе и на русском  где все подробно на писано (прошли те времена когда help читали тольуо ламеры)

2outaku:
Динамичиски формировать SQL строку не удобно так как будешь иметь гемор с приведением типа, кодировок и ТД

лучше использовать SqlParameter
insertCommand.Parameters.Add("@data1", SqlDbType.VarChar, 80).Value = data1;

Offline

#4  11.12.05 20:52

Re: Синтаксис "INSERT INTO..." в VB.net

Вопервых пиши все согласно стандарту... Это ведь не ХТМЛ, который читается в любом виде... Бери элементы базы вот в такие вот кавычки "`" (я думал раньше, что это необязательно, но не всегда запрос без них правильно распознается). кавычка такая находится на клавише перед цифрой "1".


Код: vb.net:

Dim insertStr As String = "INSERT INTO `T_Firm` (`FirmName`, `FirmFullName`,`FirmAddress`,`FirmPhone`,`[FirmE-mail]`) Values(date1, data2, data3, data4, data5)"

Во вторых бейсик не понимает таких переменных! Попробуй выделять их отдельно, типа

Код: vb.net:

Dim insertStr As String = "INSERT INTO `T_Firm` (`FirmName`, `FirmFullName`,`FirmAddress`,`FirmPhone`,`[FirmE-mail]`) Values (" & date1 & "," & data2 & "," & data3 & "," & data4 & "," & data5 & ")"


Должно помочь... Хотя хз, я немного работал с VB6 и много с PHP+MySQL, так что говорю исходя из своих знаний того и другого...

Исправлено geg_Mopo3 (11.12.05 21:03)

Offline

#5  12.12.05 01:01

Re: Синтаксис "INSERT INTO..." в VB.net

Решение проблемы нашлось через 3 минуты после поста otaku...
Всем спасибо за участие...

Стыдно - не стыдно, не всегда можно с лету найти что нужно, сначало нужно научиться искать.. я не програмист поэтому мне стыдно быть не должно ..., посмотрел бы я на человека которому не имеющему ни какого представления о программирование предстояло бы написать серьёзный проект в недельный срок, так же как это пришлось сделать мне...
На то и сужествуют форумы, что бы спрашивать, возможно в поисках более оригинального решения чем может предложить MSDN

Исправлено eagle (12.12.05 01:07)

Offline

#6  12.12.05 10:52

Re: Синтаксис "INSERT INTO..." в VB.net

Beker написал(а):

Динамичиски формировать SQL строку не удобно так как будешь иметь гемор с приведением типа, кодировок и ТД

интересно как по твоему запросы с мускулу на пхп делаються?
там все динамически, на склейке строк реализованнно!

Offline

#7  12.12.05 12:58

Re: Синтаксис "INSERT INTO..." в VB.net

otaku написал(а):

Beker написал(а):

Динамичиски формировать SQL строку не удобно так как будешь иметь гемор с приведением типа, кодировок и ТД

интересно как по твоему запросы с мускулу на пхп делаються?
там все динамически, на склейке строк реализованнно!

Не знаю есть ли у MySQL такая вещь как collation, а в PHP культура, но если ты будешь пользовать простую склейку в связке .net + MS SQL Server огребешь по самые ушки - тебе придеться рукми преобразоваывать строки, NULL-ы, вещественные числа и денежные единицы с учетом культуры, а с даnой и временем - вообще отдельная песня - нeужно учесть не только текущую культуру, но и формат даты, прописаный на сервере, который конфигурится для каждой базы отдельно. Использование SqlParameter  избавляет от этого гемороя, только и всего.
Смысл писать все руками, на мой взгляд, есть только если тебе надо в запрос передать массив (например, если используется IN) - тут два варианта либо сгенерить такой запрос руками, либо извращаться с XML

Исправлено Logos (12.12.05 12:59)

Offline

#8  12.12.05 13:19

Re: Синтаксис "INSERT INTO..." в VB.net

И еще для любителей вставок.... есть такая замечательная штука - Sql Injection, особенно это опасно если мы коннектимся с админскими правами. Пример:
мы написали некий метод содержащий примерно такой текст:

Код: 'csharp':

using(SqlConnection lSqlConnection = new SqlConnection(@"Server=(local)\SQL2000;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test"))
{
	SqlCommand lSqlCommand = lSqlConnection.CreateCommand();
	lSqlCommand.CommandText = "INSERT INTO Table1 (Id) VALUES('" + mTextBox.Text + "')";
	lSqlConnection.Open();
	lSqlCommand.ExecuteNonQuery();
}

Теперь можно в текстовое поле вписать примерно такую вещь
') ; <Insert Any SQL Statments here> ; PRINT('
<Insert Any SQL Statments here> - в это место можно вписать любой sql-ный код, например создать себе админский логин и потом спокойно шарится по Вашему серверу
А SqlParameter от этого защищает, хотя конечно можно написать метод который обезопасит введенную строку, но опять таки это надо писать самому.

Исправлено Logos (12.12.05 13:27)

Offline

#9  12.12.05 13:30

Re: Синтаксис "INSERT INTO..." в VB.net

Logos написал(а):

Не знаю есть ли у MySQL такая вещь как collation, а в PHP культура, но если ты будешь пользовать простую склейку в связке .net + MS SQL Server огребешь по самые ушки - тебе придеться рукми преобразоваывать строки, NULL-ы, вещественные числа и денежные единицы с учетом культуры, а с даnой и временем - вообще отдельная песня - нeужно учесть не только текущую культуру, но и формат даты, прописаный на сервере, который конфигурится для каждой базы отдельно. Использование SqlParameter  избавляет от этого гемороя, только и всего.
Смысл писать все руками, на мой взгляд, есть только если тебе надо в запрос передать массив (например, если используется IN) - тут два варианта либо сгенерить такой запрос руками, либо извращаться с XML

понятно
спасибо за инфу

Offline

Программирование и БД » Синтаксис "INSERT INTO..." в VB.net 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.064 сек.
Выполнено 14 запросов.