как я могу динамически изменить строку подключения - PullRequest
2 голосов
/ 21 августа 2010

Я использую vb.net и SQL-сервер 2005

У меня есть проект с классами базы данных, которые генерируются из объектов базы данных. То есть я добавляю набор данных в проект и перетаскиваю на него объект базы данных. Проблема в том, что я должен дать строку подключения, которая хранится в коде. Это нормально при разработке приложения. Но во время выполнения я хочу использовать другую строку подключения, как по соображениям безопасности, так и потому, что каждый пользователь приложения будет соответствовать пользователю базы данных (SQL) и иметь соответствующую строку подключения. Есть ли простой способ сделать это без необходимости восстанавливать все наборы данных и делать все самому?

Ответы [ 2 ]

2 голосов
/ 21 августа 2010

Сохраните строку подключения в app.settings

http://msdn.microsoft.com/en-us/library/a65txexh(VS.80).aspx

Вы можете добавить файл в приложение, вызвав app.settings.Здесь вы можете хранить свои строки подключения (они могут быть зашифрованы).Чтобы получить к ним доступ, просто позвоните по следующему номеру

Dim con As String = ConfigurationManager.ConnectionStrings("myDb").ConnectionString

Если вам необходимо войти в систему явно с разными именами пользователей и паролями, просто запишите имя пользователя и пароль при входе в приложение.И создайте строку программно.

Примером этого может быть

  <connectionStrings>
    <add name="myDb" connectionString="MYSERVER;Initial Catalog=MYDB;Persist Security  
Info=True;User ID={username};Password={pwd}"/>
  </connectionStrings>

Dim con As String = ConfigurationManager.ConnectionStrings("myDb").ConnectionString
con = con.Replace("{username}",txtUserName.Text)
con = con.Replace("{pwd}",txtPassword.Text)

'now you can do something with con like hook it up to a dataset
0 голосов
/ 06 января 2011

Вы можете попробовать создать собственную строку подключения в коде.

 Dim sqlConn As SqlClient.SqlConnection = New SqlClient.SqlConnection("server=" & my.Settings.Server & ";uid=" & txtUsername.Text & ";pwd=" & txtPassword.Text & ";database=" &  txtDatabaseName.Text & ";Connect Timeout=150;MultipleActiveResultSets=True")

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

Private Function GetFirstName(ByVal p_CustomerID As String) As String
  Dim cmd As New SqlClient.SqlCommand
  Dim sqlConn As SqlClient.SqlConnection = New SqlClient.SqlConnection("server=" & my.Settings.Server & ";uid=" & txtUsername.Text & ";pwd=" & txtPassword.Text & ";database=" &  txtDatabaseName.Text & ";Connect Timeout=150;MultipleActiveResultSets=True")
  Dim sReturnResult As String = String.Empty

  With cmd
    .Connection = sqlConn
    .CommandText = "SELECT [FIRST_NAME] " _
          & " FROM CUSTOMER " _
          & "  WHERE ID = @ID"
    .Parameters.Add("@ID", SqlDbType.VarChar, 30)
    .Parameters("@ID").Value = p_CustomerID
  End With

  Dim SQLAdapter As New SqlClient.SqlDataAdapter(cmd)
  Dim ds As New DataSet

  Try
    SQLAdapter.Fill(ds, "CUSTOMER")

    If ds.Tables(0).Rows.Count > 0 Then
        sReturnResult = ds.Tables("CUSTOMER").Rows(0).Item("FIRST_NAME").ToString()
    End If
  Catch ex As Exception
    MsgBox("GetFirstName: " & ex.Message)
  Finally
    ds.Dispose()
    sqlConn.Dispose()
    cmd.Dispose()
    SQLAdapter.Dispose()
  End Try

  Return sReturnResult


End Function

Если у вас был строго типизированный DataSet, для которого вы хотите заменить адаптер таблицы, вы также можете сделать это аналогичным образом

Dim sqlConn As SqlClient.SqlConnection = New SqlClient.SqlConnection("server=" & my.Settings.Server & ";uid=" & txtUsername.Text & ";pwd=" & txtPassword.Text & ";database=" &  txtDatabaseName.Text & ";Connect Timeout=150;MultipleActiveResultSets=True")

CUSTOMERTableAdapter.Connection = sqlConn

И последнее замечание: лично я никогда не ставлю флажок для сохранения строки соединения внутри DataSet. Я обнаружил, что если бы я сделал это по ошибке, самый простой способ решить эту проблему состоял в том, чтобы создать другой проект, создать идентичный DataSet и не выбирать сохранение строки подключения, а затем скопировать и вставить 3 или 4 файла поверх существующего проекта. DataSet (сначала создайте резервную копию), а затем заново откройте проект, выполните очистку и перестройку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...