Нет. Дополнительные методы требуют переменной экземпляра (значение) для объекта. Вы можете однако, писать статическую обертку вокруг эти ConfigurationManager
интерфейс. При реализации обертки Вам не нужен дополнительный метод, так как можно просто добавить метод непосредственно.
public static class ConfigurationManagerWrapper
{
public static ConfigurationSection GetSection( string name )
{
return ConfigurationManager.GetSection( name );
}
.....
public static ConfigurationSection GetWidgetSection()
{
return GetSection( "widgets" );
}
}
Я добавил исходный каталог в строку подключения. Я также отказался от синтаксиса ADODB.Command в пользу простого создания собственного оператора SQL и открытия набора записей для этой переменной.
Надеюсь, это поможет.
Sub GetDataFromADO()
'Declare variables'
Set objMyConn = New ADODB.Connection
Set objMyRecordset = New ADODB.Recordset
Dim strSQL As String
'Open Connection'
objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDatabase;User ID=abc;Password=abc;"
objMyConn.Open
'Set and Excecute SQL Command'
strSQL = "select * from myTable"
'Open Recordset'
Set objMyRecordset.ActiveConnection = objMyConn
objMyRecordset.Open strSQL
'Copy Data to Excel'
ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)
End Sub
Is that a proper connection string?
Where is the SQL Server instance located?
You will need to verify that you are able to conenct to SQL Server using the connection string, you specified above.
EDIT: Look at the State property of the recordset to see if it is Open?
Also, change the CursorLocation property to adUseClient before opening the recordset.
Предлагаемые изменения:
CopyFromRecordset
; Исправленный код:
Sub GetDataFromADO()
'Declare variables'
Dim objMyConn As ADODB.Connection
Dim objMyCmd As ADODB.Command
Dim objMyRecordset As ADODB.Recordset
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
'Open Connection'
objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;"
objMyConn.Open
'Set and Excecute SQL Command'
Set objMyCmd.ActiveConnection = objMyConn
objMyCmd.CommandText = "select * from mytable"
objMyCmd.CommandType = adCmdText
'Open Recordset'
Set objMyRecordset.Source = objMyCmd
objMyRecordset.Open
'Copy Data to Excel'
ActiveSheet.Range("A1").CopyFromRecordset objMyRecordset
End Sub
Я сижу за компьютером без соответствующей части программного обеспечения, но с памяти этот код выглядит неправильно. Вы выполняете команду, но отбрасываете RecordSet
, который возвращает objMyCommand.Execute
.
Я бы сделал:
Set objMyRecordset = objMyCommand.Execute
... а затем потеряю «открытый набор записей» часть.
Добавьте set nocount on
в начало сохраненной процедуры (если вы используете SQL Server). Я просто решил эту проблему в своей собственной работе, и это было вызвано промежуточными результатами, такими как «Затронуто 1203 строк»
, загруженное в Recordset
, который я пытался использовать.