Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как создать несколько объектов типа String Builder Добавлено: 20.09.06 10:55  

Автор вопроса:  student-uni
Я создаю строку соединения с сервером баз данных

ПОльзователь хочет работать с
myComputer\SQLEXPRESS
тогда


Imports System.Data.SqlClient

Public csb As New SqlConnectionStringBuilder

csb.DataSource = "myComputer\SQLEXPRESS"
csb.IntegratedSecurity = False
csb.UserID = TextBox2.Text
csb.Password = TextBox1.Text


Вопрос:
а если кроме "myComputer\SQLEXPRESS" есть ещё несколько серверов например "myComputer\MSSQL" и "testComputer\SQLEXPRESS"
и я хочу один раз запросив у пользователя пароль больше его не спрашивать до конца работы программы,
Как мне сохранить все данные (пароль, логин итд) для нескольких серверов ? Причем я заранее не знаю сколько их будет. Но при обращении например к "testComputer\SQLEXPRESS" я должен буду по имени использовать правильный SqlConnectionStringBuilder
?


ведь если я просто сделаю
csb = New SqlConnectionStringBuilder,
то информация будет только о последнем запрошенном сервере

Я полагаю нужно как то правильно построить класс,
/может интерфейс класс/
так чтоб при вызове имени подавались нужные данные

Помогите пожалуйста
Заранее благодарю

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 ПтирЯ



Вопросов: 11
Ответов: 71
 Профиль | | #1 Добавлено: 20.09.06 11:43
Сделай процедурку, которая будет тебе формировать твой stringbuilder, хотя что тебе мешает самому сформировать текст соединения ......
логин и пароль сохрани в переменные
и при создании строки соединения бери их значения

Ответить

Номер ответа: 2
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #2 Добавлено: 20.09.06 12:08

логин и пароль сохрани в переменные


Ты вопрос читал ?
Я не знаю сколько серверов захочет использовать юзер, может один а может сто.

Но мне нужно сделать так, чтобы

запрашивать у него пароль доступа к серверу только первый раз,

а при повторных обращениях "узнавать" по имени сервера какой к нему логин и пароль.
(в течении одного сеанса, т.е с момента запуска программы до её завершения. Разумеется по завершении программы информация должна пропасть, а при следующем старте всё то же самое, по первому обращению к серверу - спрашиваем логин и пароль, по последующим - достаём из памяти)

Ответить

Номер ответа: 3
Автор ответа:
 ПтирЯ



Вопросов: 11
Ответов: 71
 Профиль | | #3 Добавлено: 20.09.06 13:04
И что, у тебя юзер будет одновременно коннектиться ко все серверам?

Ответить

Номер ответа: 4
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #4 Добавлено: 20.09.06 13:26
Нет, не одновременно

Но спрашивать его второй раз о пароле на сервер который он уже один раз коннектился нельзя.

Его надо помнить.

Причем не один.

А столько, сколько серверов он успел по одному разу законнектить.

Ответить

Номер ответа: 5
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #5 Добавлено: 20.09.06 13:30
Господа профессионалы,
я вот тут набросал класс
который может хранить один экземпляр коннекта

Подозреваю что надо делать самоссылающиеся классы
Помогите с самоссылающимися пожалуйста

Это класс


Imports System.Data.SqlClient

Public Class classConnectionString
    Private csb As New SqlConnectionStringBuilder

    Public Sub New(ByVal DataSource As String, ByVal IntegratedSecurity As Boolean, Optional ByVal UserID As String = "", Optional ByVal Password As String = "";)
        csb.DataSource = DataSource
        csb.IntegratedSecurity = IntegratedSecurity
        csb.UserID = UserID
        csb.Password = Password

    End Sub

    Public ReadOnly Property propConnStrBuild() As SqlConnectionStringBuilder
        Get
            Return csb
        End Get

    End Property

End Class


а это его использование

Imports System.Data.SqlClient

Public Class Form1
    Dim myClassConnStr As classConnectionString

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        myClassConnStr = New classConnectionString("myComp", True, "test", "test";)
        Dim connSchDB As New SqlConnection(myClassConnStr.propConnStrBuild.ConnectionString)

    End Sub
End Class

Ответить

Номер ответа: 6
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #6 Добавлено: 20.09.06 14:05
короче, залил всё в датасет,
но если кто пособит - спасибо

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 21.09.06 22:53
Слушай.. а в чем проблема то вообще?
Лично я поступил бы так в твоей ситуации:
1. Создал бы класс примерно похожий на твой, со свойствами необходимым для подключения к БД.. (DataSource,Login,PWD,.. и т.д.. ) плюс добавил бы свойсво DataBaseType И один метод GetConnectionString, который возвращал бы динамически формируемую строку подключения.. В отличии от твоего примера, где ты жестко привязан к SqlConnectionStringBuilder. Его использование вовсе не является обязательным.. вместо него можно с таким же успехом подсунуть обычную строку соеденения..
2 Создал бы коллекцию.. что то типа HashTable, или любую другую поддерживающую Key. В данном случае ключом будет выступать название сервера.. (в твоем примере.. testComputer\SQLEXPRESS.. или что то другое)
Далее твои действия сводятся к следующему:
- при переключении на новый сервер проверяешь коллекцию на наличие соответствующего ключа (благо по свойству Key это сделать очень легко)
- и если его там нет, то показываешь юзеру диалог с предложением ввести данные, необходимые для подключения.. после чего делаешь тестовое соеденение с БД , и если все ОК, то добавляешь в свою коллекцию.. и потом юзаешь на протяжении всего сеанса.. (при необходимости можешь даже потом сохранить эту коллекцию на винт, чтобы не тревожить юзера на следующий день)
- а если в коллекции уже есть этот ключ(который обязан быть уникальным) то просто вызываешь метод GetConnectionString, который на основании DataBaseType и данных для подключения динамически формирует необходимую тебе строку подключения...
ВОт собственно и все... ))

Ответить

Номер ответа: 8
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #8 Добавлено: 21.09.06 23:33
О! Это ближе к делу. Спасибо попробую.
а DataBaseType не нужен. Речь идёт только об МсСкюЭль

Ответить

Номер ответа: 9
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #9 Добавлено: 21.09.06 23:36
А как создать коллекцию, чтобы туда сохранять четыре параметра DataSource,Аутентификация, Login,PWD ?

Ответить

Номер ответа: 10
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #10 Добавлено: 22.09.06 17:40
А как создать коллекцию, чтобы туда сохранять четыре параметра DataSource,Аутентификация, Login,PWD ?

Эти 4 параметра храни в своем классе.. (определи эти свойства непосредственно внутри самого класса). А вот уже сам класс или классЫ, если их будет много, можно хранить в любой коллекции, поддерживающей свойство Key, и предназначенную для хранения пар ключ-значение. Я обычно использую HashTable, но кроме нее есть еще несколько видов коллекций который легко справятся с этой задачей..

P.S. Поскольку у тебя только один тип БД, а именно MS SQL , то свойство DataBaseType на самом деле становится не нужным..

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам