2015-01-12 6 views
0

В моем автономном приложении Windows, у меня есть строка соединения:Почему мой сеанс связи с SQL?

Private Const _sqlDB As String = "Data Source=(localdb)\v11.0;Initial Catalog=localACETest;Integrated Security=True;AttachDbFileName=C:\ACE DB\localACETest.mdf" 

К которому Я добавляю аут подключения (фигу, что это абсурдно долго ожидание):

";Connect Timeout=1000" 

Может кто-нибудь объяснить, почему У меня сейчас есть процедуры, которые были НЕ до добавления таймаута подключения?

Вот как я создаю соединение:

 _conn = New SqlConnection(_sqlDB) 
     _conn.Open() 

     Dim _dr As SqlDataReader 
     Dim _cmd As New SqlCommand("Random Stored Procedure", _conn) 
     _cmd.Parameters.Add("@BusGrp", System.Data.SqlDbType.NVarChar).Value = bg 
     _cmd.CommandType = System.Data.CommandType.StoredProcedure 

Это, кажется, не происходит, когда я удаляю аут подключения и добавить команду тайм-аут, однако:

 _cmd.CommandTimeout = 1000 

Хотя я понимаю, что команда & тайм-аут соединения - это две разные вещи, мне не имеет смысла, что добавление -соединения тайм-аут для расширения значения по умолчанию вызовет эту проблему.

+4

У вас неправильное свойство, это должно быть «Время ожидания соединения» - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout%28v=vs.110%29 .aspx – Kami

+2

Чтобы избежать подобных проблем, я всегда советую использовать SqlConnectionStringBuilder, который не позволяет создавать неверные строки подключения. –

+0

Я использовал это как свою ссылку: https://www.connectionstrings.com/all-sql-server-connection-string-keywords/ Спасибо вам обоим за помощь. – user

ответ

1

Вы используете неверную свойство для тайм-аута соединения:

Connect Timeout=1000 

должен быть

Connection Timeout=1000 

Правильное свойство указано в MSDN documentation для Connection Timeout. Вот правильный способ использования базы данных SQL (взятый из той же документации MSDN):

Как обсуждалось через комментарии, вы на самом деле подключения к серверу SQL, есть лучший способ здесь:

Sub connectToDb() 
    myConn = New SqlConnection("Server=(local);Database=[.database name here.];User Id=[.username here.];Password=[.password here.];") 
    Dim returnValue As Object 
    cmd.CommandType = CommandType.Text 
    cmd.Connection = myConn 

    Try 
     myConn.Open() 
     MsgBox("Connected to SQL") 
    Catch excep As Exception 
     MsgBox("An error occurred: " + excep.Message) 
    End Try 
End Sub 

Для запроса к базе данных для чего-то, вы можете использовать:

cmd.CommandText = "USE [.database name.]" 
    cmd.ExecuteScalar() 
    cmd.CommandText = "[.SQL query.]" 
    returnValue = cmd.ExecuteScalar() 'You can check the returnValue to see if the query returned anything. 

Если у вас есть ошибка, что несколько запросов, не могут быть выполнены в то же время, вы должны включить MARS, добавив в строку подключения MultipleActiveResultSets=True;.

+0

Сохраняет ли строку подключения в файле более эффективно, чем просто поместить ее в начало класса? – user

+0

@user Вероятно, нет, потому что сначала вам нужно прочитать в файле, который использует больше памяти и увеличит время, затраченное на то, чтобы попасть в базу данных. – cybermonkey

+0

Что делать, если вам нужно изменить строку подключения? Вы заменяете программу вместо редактирования файла конфигурации? Микро-оптимизация, которая требует гибкости? – Steve

0

Ключевое слово для использования в строке соединения: ConnectTimeout (без пробела) или Connection Timeout, как показано на рисунке here. У вас есть пробел в Connect Timeout, и если вы установили это и удалили строку _cmd.CommandTimeout = 1000, это, вероятно, игнорирует значение строки подключения, так как оно является неправильным ключевым словом и использует значение по умолчанию 15 секунд.

Попробуйте изменить строку подключения, чтобы использовать Connection Timeout=1000.

 Смежные вопросы

  • Нет связанных вопросов^_^