Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / MSSQL, ADO и параметризованные запросы / 11 сообщений из 11, страница 1 из 1
30.10.2007, 16:36
    #34905239
Lord Carlsberg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL, ADO и параметризованные запросы
Доброго времени суток!
В MSSQL новичок, поэтому вопрос кому-то может показаться глупым.
Пытаюсь из скрипта (JScript) выполнить при помощи ADO через ODBC параметризованный INSERT-запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var objConnection = WScript.CreateObject("ADODB.Connection");
objConnection.Open("DSN=SysLogsTestDB");

var objCommand = WScript.CreateObject("ADODB.Command");
objCommand.ActiveConnection = objConnection;

objCommand.CommandText = "INSERT INTO tblEvents (fldCategory) VALUES (:prmCategory)";

objCategory = objCommand.CreateParameter("prmCategory",  18 );
objCommand.Parameters.Append(objCategory);

objCategory.Value =  0 ;

objCommand.Execute;
При вызове objCommand.Execute (т.е. непосредственно при отправке запроса на выполнение) возникает ошибка "[Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около ":"." Подозреваю, что это связано с особенностями работы с параметризованными запросами в MS SQL. Копался в BOL, но в чём заключаются эти особенности так и не понял. Использую MS SQL Server 2005 Express Edition. Тип ODBC-драйвера - SQL server. Весрия ADO - 2.8. В чём моя ошибка?
...
Рейтинг: 0 / 0
30.10.2007, 16:46
    #34905286
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL, ADO и параметризованные запросы
Не знаю, как в ADO, а в ADO.NET каждый параметр в тексте запроса должен быть представлен знаком вопроса '?'. Может и в ADO тоже самое?
Код: plaintext
objCommand.CommandText = "INSERT INTO tblEvents (fldCategory) VALUES (?)";
С уважением, Алексей
...
Рейтинг: 0 / 0
30.10.2007, 16:46
    #34905291
^^
^^
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL, ADO и параметризованные запросы
Ссылочка на MSDN2005
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref4/html/P_System_Data_SqlClient_SqlCommand_Parameters.htm
Вместо : нужно ставить @
...
Рейтинг: 0 / 0
30.10.2007, 17:05
    #34905374
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL, ADO и параметризованные запросы
Вот ссылка на использование "?" как параметры:
http://msdn2.microsoft.com/en-us/library/aa226134(SQL.80).aspx

С уважением, Алексей
...
Рейтинг: 0 / 0
31.10.2007, 15:51
    #34908058
Lord Carlsberg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL, ADO и параметризованные запросы
Aleksey-KНе знаю, как в ADO, а в ADO.NET каждый параметр в тексте запроса должен быть представлен знаком вопроса '?'. Может и в ADO тоже самое?
Код: plaintext
objCommand.CommandText = "INSERT INTO tblEvents (fldCategory) VALUES (?)";
С уважением, Алексей
В ADO тоже самое. Спасибо.
^^Ссылочка на MSDN2005
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref4/html/P_System_Data_SqlClient_SqlCommand_Parameters.htm
Вместо : нужно ставить @
А вот так не работает. Ругается ошибкой "[Microsoft][ODBC SQL Server Driver][SQL Server]Необходимо объявить скалярную переменную "@prmCategory".". Видимо использование @ с параметрами в запросах - это "фишка" ADO.NET. Хотя использовать такой синтаксис куда удобнее, т.к. связывание параметров с запросом происходит по имени параметра, а не по порядку его добавления в коллекцию параметров.
...
Рейтинг: 0 / 0
31.10.2007, 16:43
    #34908257
+2
+2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL, ADO и параметризованные запросы
Lord CarlsbergА вот так не работает. Ругается ошибкой "[Microsoft][ODBC SQL Server Driver][SQL Server]Необходимо объявить скалярную переменную "@prmCategory".
Текст того, что Вы выполняете приведите.
...
Рейтинг: 0 / 0
01.11.2007, 07:32
    #34909117
Lord Carlsberg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL, ADO и параметризованные запросы
+2 Lord CarlsbergА вот так не работает. Ругается ошибкой "[Microsoft][ODBC SQL Server Driver][SQL Server]Необходимо объявить скалярную переменную "@prmCategory".
Текст того, что Вы выполняете приведите.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var objConnection = WScript.CreateObject("ADODB.Connection");
objConnection.Open("DSN=SysLogsTestDB");

var objCommand = WScript.CreateObject("ADODB.Command");
objCommand.ActiveConnection = objConnection;

objCommand.CommandText = "INSERT INTO tblEvents (fldCategory) VALUES (@prmCategory)";

objCommand.Parameters.Append(objCommand.CreateParameter("prmCategory",  18 ));

objCommand.Parameters(prmCategory).Value =  0 ;

objCommand.Execute;
Воть...
...
Рейтинг: 0 / 0
01.11.2007, 15:38
    #34910701
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL, ADO и параметризованные запросы
Попробуйте такой вариант - должно работать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Dim cmd As New ADODB.Command
    cmd.ActiveConnection = "DSN=DSN_NAME;"
    
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "sp_executesql"
    cmd.Parameters.Append cmd.CreateParameter("@stmt", adVarWChar, adParamInput,  4000 , "select @prmCategory")
    cmd.Parameters.Append cmd.CreateParameter("@params", adVarWChar, adParamInput,  4000 , "@prmCategory int")
    cmd.Parameters.Append cmd.CreateParameter("@prmCategory", adInteger, adParamInput,  4 ,  123 )
    cmd.Execute
    
    Set cmd = Nothing
...
Рейтинг: 0 / 0
01.11.2007, 15:41
    #34910714
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL, ADO и параметризованные запросы
Для Вашего случая:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Dim cmd As New ADODB.Command
    cmd.ActiveConnection = "DSN=DSN_NAME;"
    
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "sp_executesql"
    cmd.Parameters.Append cmd.CreateParameter("@stmt", adVarWChar, adParamInput,  4000 , "INSERT INTO tblEvents (fldCategory) VALUES (@prmCategory)")
    cmd.Parameters.Append cmd.CreateParameter("@params", adVarWChar, adParamInput,  4000 , "@prmCategory int")
    cmd.Parameters.Append cmd.CreateParameter("@prmCategory", adInteger, adParamInput,  4 ,  0 )
    cmd.Execute
    
    Set cmd = Nothing
...
Рейтинг: 0 / 0
01.11.2007, 15:52
    #34910755
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL, ADO и параметризованные запросы
Это, естественно, для MSSQL сервера. Для других не знаю - могут быть разные варианты.
--
73 GL RA1OGE/3
...
Рейтинг: 0 / 0
03.11.2007, 12:36
    #34914937
Lord Carlsberg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL, ADO и параметризованные запросы
2Roman S. Globulin
То, что надо. Большое спасибо.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / MSSQL, ADO и параметризованные запросы / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]