| |
|
|
| | Вопрос №2.
Не могу найти у себя файл instnwind.sql скрипта установки базы Northwind.
Сеппа пишет он должен распаковываться в
...\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Samples\Setup\
Глянь плз, если у тебя есть, зашли мну. | |
| |
| |
|
|
| |
|
|
| | Я знал, что ты настоящий друг.  | |
| |
| |
| |
|
|
| | Новые методы работы гестапо:
Раньше они просто прижигали каленым железом и вбивали иголки под ногти.
Теперь они предлагают старому больному человеку в качестве средства доступа к данным ADO.NET, с ее перегруженными по самые помидоры методами классов, типами полей, отличающимися от
типов полей сервера и прочая и прочая... УЖОС!!!
Предсмертная записка:
В моем преждевременном умопомрачении прошу винить Мюллера.
 | |
| |
| |
| |
|
|
| | Ну положим, методы доступа к данным ADO.Net нифига не перегружены и уж тем более не по самые помидоры.
Там то методов доступа - кот наплакал - DataSet и DataReader
Отличие этих методов друг от друга - производительностью. У DataReader-а она значительно выше, но датаридером можно пробежаться по записям только сверху вниз, и возвращаться назад нельзя.
DataSet - некий аналог рекордсета, но с куда большими возможностями.
Например в него можно засунуть несколько таблиц, установить между ними связи и доставать данные, пробегаясь по ним в любом направлении.
Типы полей не отличаются, просто называются чуть по другому.
Там на самом деле все просто, как лом в разрезе. Если чо не понятно - обращайся, постараюсь на пальцах объяснить
ЗЫ А предсмертную записку сохраню для потомков.  | |
| |
| |
| |
|
|
| |
перегруженными по самые помидоры методами классов
|
Слово "классов" добавил видимо позже, чем ты прочитал.
Спасибо за желание помочь, но:
1. Для того, чтобы задать вопрос, надо быть процентов на 50 в теме.
2. Для того чтобы понять ответ, надо быть процентов на 75 в теме.
Ни тем не другим пока похвастаться не могу.  | |
| |
| |
| |
|
|
| | Прочита действительно раньше, чем ты добавил. А я собирался дописать, что фраза "перегруженный метод" в .Net имеет несколько иной смысл.  | |
| |
| |
| |
|
|
| | Про типы данных:
"...Объект SqlDataReader возвращает тип данных Decimal модели SQL Server как тип данных Decimal модели .NET. Хотя названия и похожи, тип данных Decimal модели SQL Server может хранить больше данных, чем тип данных Decimal модели .NET. ..."
ну и т.д. стр. 125-126.
В принципе решается с помощью специализированных классов, но ведь об этом надо знать и помнить.
Уж если ребята пишут поставщика данных к конкретному источнику данных, было-бы наверное правильно уровнять типы данных источника и поставщика, что бы не было потребности в специализированных классах.
Ну это так, лирика недоросля.  | |
| |
| |
| |
|
|
| | Применение специализированных классов заключается в написании одной строчки
Imports System.Data.SqlClient в классе формы.
Более того, если данная строчка объявлена не будет - компилятор выздаст ошибку.
(Это сродни подключения библиотек в С и С++). Так, что все там продумано. | |
| |
| |
| |
|
|
| | Эх, буду нырять глубже.
Тонуть, так тонуть.
 | |
| |
| |
| |
|
|
| | Вот простой пример использования датаридера.
Допустим из базы под названием MySQLBase нужно вытащить из таблицы TblListObj вытащить наименование объекта (NaimObj) и город в котором он находится (CitiObj) для объекта c ID=1 ( IdObj)
Сначала идет подключение необимых специализированных классов
Imports System.Data.SqlClient.SqlConnectionStringBuilder
Imports System.Data.SqlClient
Imports System.Windows.Forms.Form
Imports System.Data
Imports System.Data.DataSet
Imports System.Data.DataColumn
Объявление класса формы:
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Объявляем строку подключения и параметры подключения
Dim conn1 As New SqlConnectionStringBuilder()
conn1.DataSource = System.Environment.MachineName() '- имя сервера. В данном случае совпадает с именем машины
conn1.InitialCatalog = "MySQLBase"
conn1.IntegratedSecurity = True
Dim cn1 As New SqlConnection(conn1.ConnectionString) - 'Обявляем строку подключения
Dim strSQL1 as String
cn1.Open()
strSQL1 = " SELECT * FROM dbo.TblListObj WHERE IdObj=1"
Dim cmd1 As New SqlCommand(strSQL1, cn1) ' Объявление объекта Command
Dim rdr1 As SqlDataReader = cmd1.ExecuteReader() - 'Объявление объекта DataReader
Считывание данных из таблицы и занесение их в соответствующие текстовые поля.
Do While rdr1.Read
Me.LabNaim.Text = (rdr1("NaimObj"))
Me.LabCiti.Text = (rdr1("CitiObj"))
Loop
rdr1.Close()
cn1.Close()
End Sub
End Class
Вот и фсе. Не правдали, очень напоминает работу с рекордсетом?  | |
| |
| |
|
|
|
|
| |
|
|
| |
Простите, А о чём вы сейчас говорите -
|
Дык это - выше вроде написано про что
Новые методы работы гестапо
|
 | |
| |
| |
|
|
| |
|
|
| | 250 страниц (треть книжки) прочитал.
В голове каша из объектов, классов и методов.
В советские времена в качестве снотворного пользовал "Капитал" Маркса.
Теперь есть достойная замена.  | |
| |
| |
| |
|
|
| | так тебе там фигня осталась. Через недельку будешь крутым спецом по ADO.NET
 | |
| |
| |
| |
|
|
| | "...Если насмерть не упьюсь, на хмельной пирушке,
Обязательно вернусь к вам друзья, подружки..."
Brother давно поет любимую песню "Toner Low".
Ехать за ним лень, а с экрана не могу читать.
Так что за недельку полюбасу не управлюсь.  | |
| |
| |
| |
|
|
| | Дочитал Сеппу, понял, что ничего не понял.
Хвастай, что у тебя исчо есть, типа азбуки, где "за ручку водят". | |
| |
| |
| |
|
|
| | даже не знаю, что тебе сказать....
У Сеппы все очень просто и внятно описано.
Ты примеры пальчиками пропускал через компьютер?
Если нет, то одним чтением не обойдешься - только на практике.
Давай по порядку, что не понятно. Как говорится с самого начала. Там все элементарно.
ЗЫ А синтаксис VB.NET ты освоил? | |
| |
| |
| |
|
|
| |
А синтаксис VB.NET ты освоил
|
Ну вроде как обычный синтаксис работы с классами, слегка отличающийся от VBA.
Освоил? -конечно нет.
Пальпацию примерам, признаюсь, делал далеко не всем.
Видимо стоит начать с первой странички?  | |
| |
| |
|
|
| |
|
|
| |
Злой Вы.
Ну и задачи ты ставишь барин, без помошников за неделю не управиться.
Мастером создать строку подключения могу, дальше хуже.
Буду пробовать. | |
| |
| |
| |
|
|
| | А не обязательно строку подключения создавать мастером - ручками, ручками
Dim strSQL1 As String
Dim conn1 As New SqlConnectionStringBuilder() - создается объект строки подключения
conn1.DataSource = serv ' тута указывается имя сервера
conn1.InitialCatalog = bas ' тута указывается имя базы
conn1.IntegratedSecurity = True
Using cn1 As New SqlConnection(conn1.ConnectionString) - создается подключение
cn1.Open()
strSQL1 = " SELECT * FROM TblDol "
Dim da2 As New SqlDataAdapter(strSQL1, cn1) - создается и заполняется датаадаптер, в который сгружаются данные из таблицы TblDol
Dim ds2 As New DataSet() - создается датасет ( аналог рекордсета в аксе )
da2.Fill(ds2, "TblDol") - заполняется датасет данными из датаадаптера
With ds2
Me.ComboBox1.DataSource = .Tables("TblDol") - это аналог роусорса для комбобокса
Me.ComboBox1.DisplayMember = "NaimDol" - показывает что будет отображаться в комбобоксе
Me.ComboBox1.ValueMember = "IdDol" - задается значения комбобокса - типа аналог значений комбобокса в аксе (Column0)
End With
End Using - кирдык соединению
|
В результате имеешь комбобокс с заполненными данными.
 | |
| |
| |
| |
|
|
| | К ручкам то и головушку прикладывать надобноть, а если ее нет?
Мне бы пока мастерами научиться пользоваться. | |
| |
| |
|
|
| |
|
|
| | Дапустим твае подключение абзываицца cn1
a DataSet абзываицца ds1 ( штобы избежать абзывание объектов ключевыми словеями )
cn1.open()
dim TableAdapter as new SqlDataAdapter(Qwery, cn1)
Dim ds1 As New DataSet()
TableAdapter.Fill(ds1, "Придумываешь любое имя")
With ds2
Me.ComboBox1.DataSource = .Tables("Твое придумманое любое имя")
Me.ComboBox1.DisplayMember = "ProductName"
Me.ComboBox1.ValueMember = "ProductID"
End With
cn1.close() | |
| |
| |
| |
|
|
| | А мастера-построители за меня все это написать не хотят, или не могут?
Спасибо, буду курить дальше.
Занимайся делами, а то со мной без зарплаты останешься.  | |
| |
| |
| |
|
|
| | Можно и в конструкторе - кидаешь на форму комбобокс, добавляешь BindingSource.
Затем в конструкторе жмешь на BindingSource правой клавишей мыши выбираешь проперти. В пропертях в поле DataSource выбираешь Add Project Data Source. Далее конструктором выбираешь нужную таблицу.
Потом заходишь в проперти комбобокса и в датасоурсе выбираешь в датабиндинге таблицу.
Затем в DisplayMember и ValueMember выбираешь нужные столбцы. | |
| |
| |
| |
|
|
| | ОК.  | |
| |
| |