Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Скрипт PowerShell вызов хранимой процедуры  [new]
SguXa
Member

Откуда:
Сообщений: 28
Здравствуйте! не получается сделать скрипт выдает ошибку
вот мой скрипт
$connString = "Data Source=192.192.192.192\SQL2008,1433;Initial Catalog=FollowMeTest;User Id=Логин; Password=Пароль;"
$SqlConnection = new-object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $connString
$SqlCmd = New-Object System.Data.SqlClient.SqlComman
$SqlCmd.CommandText = "dbo.AppUser"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]


ОШИБКА
Исключение при вызове "FILL" с "1" аргументами: "Procedure or function 'AppUser' expects parameter '@Login', which was not supplied."
строка;1 знак; 17
*SqlAdapter.Fill <<<< ($DataSet)
+CategoryInfo :NotSpecified: <;> [], MethodInvocationException
+FullyQualifiedErrorld : DotNetMethodException

Вот хранимая процедура

ALTER PROCEDURE [dbo].[AppUser] 
	@Login varchar(50), 
	@Имя varchar(30), 
	@Фамилия varchar(30), 
	@DepartmentID int = 3, 
	@EmailAddress varchar(30) 
AS
BEGIN
	set nocount on
IF EXISTS ( SElECT* FROM dbo.Users
WHERE [UserLogon]=@login OR
[EmailAddress]=@EmailAddress)
	BEGIN
	     Raiserror ('Такой Login или Email уже есть',16,1)
	     return 0		 	
	END
INSERT [dbo].[Users]
([UserLogon]  , UserFirstName , UserLastName, DepartmentID, [EmailAddress])
VALUES
(@Login , @Имя , @Фамилия , @DepartmentID, @EmailAddress)
RETURN (SELECT userID FROM dbo.Users WHERE userLogon = @Login AND UserFirstName = @Имя AND UserLastName = @Фамилия AND DepartmentID=@DepartmentID AND EmailAddress = @EmailAddress) 
END


Сообщение было отредактировано: 10 фев 14, 23:20
10 фев 14, 21:40    [15548523]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104760
SguXa
Исключение при вызове "FILL" с "1" аргументами: "Procedure or function 'AppUser' expects parameter '@Login', which was not supplied."
строка;1 знак; 17

Так вы ни одного параметра не передаете при вызове процедуры
10 фев 14, 21:43    [15548533]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
SguXa
Member

Откуда:
Сообщений: 28
Добавил параметр для вызова процедуры
$connString = "Data Source=xxx\SQL2008,1433;Initial Catalog=FollowMeTest;User Id=user; Password=pass;"
$SqlConnection = new-object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $connString
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "[AppUser]"
$SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlCmd.Parameters.Add("@Login", "$TEST","@Name","$Test1 "@Lastname", "$Test2", "@DepartmentID","$3", "@EmailAddress","$test4")
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]

пишет ошибку: Не удается найти перегрузку для "Add' и количество аргуметов: "10"
строка:1 знак: 23
+$SqlCmd.Parameters.Add <<<<("@Login", "$TEST","@Name","$Test1 "@Lastname", "$Test2", "@DepartmentID","$3", "@EmailAddress","$test4")
+CategoryInfo :NotSpecified: <;> [], MethodInvocationException
+FullyQualifiedErrorld : DotNetMethodException

Что ему не нравится?

Сообщение было отредактировано: 11 фев 14, 22:18
11 фев 14, 14:14    [15551289]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104760
SguXa
Что ему не нравится?

Ему не нравится, что вы придумываете синтаксис Add.
Вы почему то решили, что все параметры можно "запихнуть" скопом.
Откуда такие фантазии ?
11 фев 14, 14:18    [15551308]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
SguXa
Member

Откуда:
Сообщений: 28
Исправил но при вызове срипта параметры не передаются. Ошибок не выдает
$connString = "Data Source=xxx\SQL2008,1433;Initial Catalog=FollowMeTest;User Id=user; Password=pass;"
$SqlConnection = new-object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $connString
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "[AppUser]"
$SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlCmd.Parameters.AddWithValue("@Login", [System.Data.SqldbType]::VarChar);
$SqlCmd.Parameters.AddWithValue("@Name", [System.Data.SqldbType]::VarChar);
$SqlCmd.Parameters.AddWithValue("@Lastname", [System.Data.SqldbType]::VarChar);
$SqlCmd.Parameters.AddWithValue("@EmailAddress", [System.Data.SqldbType]::VarChar);
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]

Сообщение было отредактировано: 11 фев 14, 22:18
11 фев 14, 21:50    [15553930]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104760
Опять какие то неувязки
- у процедуры 5 параметров, а передаете 4
- у параметра имя @Имя, а передаете @Name
и тп
11 фев 14, 22:22    [15554014]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
invm
Member

Откуда: Москва
Сообщений: 9632
Ваша процедура не возвращает никаких наборов данных. Так что DataSet попросту нечем заполнять.
11 фев 14, 22:27    [15554029]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
SguXa
RETURN (SELECT userID FROM
Оператор RETURN в принципе предназначен для возврата кода ошибки (хотя некоторые используют его и для возврата каких то значений).

Используйте лучше для возврата значений либо оператор SELECT, либо параметры типа OUTPUT
12 фев 14, 00:26    [15554370]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6115
SguXa,

в вашем скрипте нет никакой специфики PS, поэтому сделайте сначала то, что вам нужно, на ADO.NET в C# или VB.Net. Возникшие в процессе вопросы можно задать на соответствующих местных форумах. Когда получится - перенесёте это на PS.
12 фев 14, 06:20    [15554670]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
SguXa
Member

Откуда:
Сообщений: 28
Переделал. Все работает. Но вот теперь как переделать так что бы когда вызываешь скрипт например PS С:\> .\Adduser.ps1 можно было сразу написать параметры которые нужно передавать, а не в самом скрипте переписывать.
$connString = "Data Source=192.168.5.43\SQL2008,1433;Initial Catalog=FollowMeTest;User Id=Roman; Password=Roman2;"
$SqlConnection = new-object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $connString
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "[AppUser]"
$SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlCmd.Parameters.AddWithValue("@Login", [System.Data.SqldbType]::VarChar)
$SqlCmd.Parameters.AddWithValue("@Name",  [System.Data.SqldbType]::VarChar) 
$SqlCmd.Parameters.AddWithValue("@Lastname",  [System.Data.SqldbType]::VarChar)
$SqlCmd.Parameters.AddWithValue("@EmailAddress", [System.Data.SqldbType]::VarChar)
$SqlCmd.Parameters["@Login"].Value="Test"
$SqlCmd.Parameters["@Name"].Value="Test"
$SqlCmd.Parameters["@Lastname"].Value="Test"
$SqlCmd.Parameters["@EmailAddress"].Value="Test"
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]

автор
Опять какие то неувязки
- у процедуры 5 параметров, а передаете 4
- у параметра имя @Имя, а передаете @Name

-передаю 4 так как 5 по умолчанию передает значение
-поменял до этого в хранимой процедуре все на латиницу что бы проблем не было с кодировкой.
12 фев 14, 12:39    [15556217]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6115
SguXa
Все работает. Но вот теперь как переделать так что бы когда вызываешь скрипт например PS С:\> .\Adduser.ps1 можно было сразу написать параметры которые нужно передавать, а не в самом скрипте переписывать.

Гуглите по powershell $args - этот вопрос уже совсем не по теме данного форума.
12 фев 14, 17:33    [15558508]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
може поможет
12 фев 14, 17:37    [15558525]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
virtuOS
Member

Откуда: большая деревня
Сообщений: 266
А зачем изобретать велосипед?
Делаете Add-PSSnapin SqlServerCmdletSnapin100 и затем Invoke-Sqlcmd
http://technet.microsoft.com/ru-ru/library/cc281720.aspx
18 фев 14, 16:33    [15583773]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт PowerShell вызов хранимой процедуры  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
virtuOS,

Скорее ровно наоборот.
Цели разные, возможности и интерфейс взаимодействия (параметры, обработка).
А с другой стороны сниплета скорее не будет, как я понимаю он поставляется вместе со скулем, а PowerShell и базовый .Net есть везде.

Но в целом да, не особо описаны и цели и окружение у ТС, т.е. однозначно не сказать.
19 фев 14, 04:37    [15586792]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить