Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 MSSQL, ADO и параметризованные запросы  [new]
Lord Carlsberg
Member

Откуда:
Сообщений: 35
Доброго времени суток!
В MSSQL новичок, поэтому вопрос кому-то может показаться глупым.
Пытаюсь из скрипта (JScript) выполнить при помощи ADO через ODBC параметризованный INSERT-запрос:
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. В чём моя ошибка?
30 окт 07, 16:36    [4856569]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL, ADO и параметризованные запросы  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Не знаю, как в ADO, а в ADO.NET каждый параметр в тексте запроса должен быть представлен знаком вопроса '?'. Может и в ADO тоже самое?
objCommand.CommandText = "INSERT INTO tblEvents (fldCategory) VALUES (?)";
С уважением, Алексей
30 окт 07, 16:46    [4856635]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL, ADO и параметризованные запросы  [new]
^^
Guest
Ссылочка на MSDN2005
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref4/html/P_System_Data_SqlClient_SqlCommand_Parameters.htm
Вместо : нужно ставить @
30 окт 07, 16:46    [4856643]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL, ADO и параметризованные запросы  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Вот ссылка на использование "?" как параметры:
http://msdn2.microsoft.com/en-us/library/aa226134(SQL.80).aspx

С уважением, Алексей
30 окт 07, 17:05    [4856799]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL, ADO и параметризованные запросы  [new]
Lord Carlsberg
Member

Откуда:
Сообщений: 35
Aleksey-K
Не знаю, как в ADO, а в ADO.NET каждый параметр в тексте запроса должен быть представлен знаком вопроса '?'. Может и в ADO тоже самое?
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. Хотя использовать такой синтаксис куда удобнее, т.к. связывание параметров с запросом происходит по имени параметра, а не по порядку его добавления в коллекцию параметров.
31 окт 07, 15:51    [4861032]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL, ADO и параметризованные запросы  [new]
+2
Guest
Lord Carlsberg
А вот так не работает. Ругается ошибкой "[Microsoft][ODBC SQL Server Driver][SQL Server]Необходимо объявить скалярную переменную "@prmCategory".

Текст того, что Вы выполняете приведите.
31 окт 07, 16:43    [4861329]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL, ADO и параметризованные запросы  [new]
Lord Carlsberg
Member

Откуда:
Сообщений: 35
+2
Lord Carlsberg
А вот так не работает. Ругается ошибкой "[Microsoft][ODBC SQL Server Driver][SQL Server]Необходимо объявить скалярную переменную "@prmCategory".

Текст того, что Вы выполняете приведите.

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;
Воть...
1 ноя 07, 07:32    [4862911]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL, ADO и параметризованные запросы  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Попробуйте такой вариант - должно работать:

    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
1 ноя 07, 15:38    [4866001]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL, ADO и параметризованные запросы  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Для Вашего случая:

    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
1 ноя 07, 15:41    [4866026]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL, ADO и параметризованные запросы  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Это, естественно, для MSSQL сервера. Для других не знаю - могут быть разные варианты.
--
73 GL RA1OGE/3
1 ноя 07, 15:52    [4866125]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL, ADO и параметризованные запросы  [new]
Lord Carlsberg
Member

Откуда:
Сообщений: 35
2Roman S. Globulin
То, что надо. Большое спасибо.
3 ноя 07, 12:36    [4873647]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить