#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
#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
#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

