Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Так вы ни одного параметра не передаете при вызове процедуры |
||
10 фев 14, 21:43 [15548533] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Ему не нравится, что вы придумываете синтаксис Add. Вы почему то решили, что все параметры можно "запихнуть" скопом. Откуда такие фантазии ? |
||
11 фев 14, 14:18 [15551308] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Опять какие то неувязки - у процедуры 5 параметров, а передаете 4 - у параметра имя @Имя, а передаете @Name и тп |
11 фев 14, 22:22 [15554014] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9632 |
Ваша процедура не возвращает никаких наборов данных. Так что DataSet попросту нечем заполнять. |
11 фев 14, 22:27 [15554029] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
Используйте лучше для возврата значений либо оператор SELECT, либо параметры типа OUTPUT |
||
12 фев 14, 00:26 [15554370] Ответить | Цитировать Сообщить модератору |
Сон Веры Павловны Member Откуда: Сообщений: 6115 |
SguXa, в вашем скрипте нет никакой специфики PS, поэтому сделайте сначала то, что вам нужно, на ADO.NET в C# или VB.Net. Возникшие в процессе вопросы можно задать на соответствующих местных форумах. Когда получится - перенесёте это на PS. |
12 фев 14, 06:20 [15554670] Ответить | Цитировать Сообщить модератору |
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]
-передаю 4 так как 5 по умолчанию передает значение -поменял до этого в хранимой процедуре все на латиницу что бы проблем не было с кодировкой. |
||
12 фев 14, 12:39 [15556217] Ответить | Цитировать Сообщить модератору |
Сон Веры Павловны Member Откуда: Сообщений: 6115 |
Гуглите по powershell $args - этот вопрос уже совсем не по теме данного форума. |
||
12 фев 14, 17:33 [15558508] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
може поможет |
12 фев 14, 17:37 [15558525] Ответить | Цитировать Сообщить модератору |
virtuOS Member Откуда: большая деревня Сообщений: 266 |
А зачем изобретать велосипед? Делаете Add-PSSnapin SqlServerCmdletSnapin100 и затем Invoke-Sqlcmd http://technet.microsoft.com/ru-ru/library/cc281720.aspx |
18 фев 14, 16:33 [15583773] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
virtuOS, Скорее ровно наоборот. Цели разные, возможности и интерфейс взаимодействия (параметры, обработка). А с другой стороны сниплета скорее не будет, как я понимаю он поставляется вместе со скулем, а PowerShell и базовый .Net есть везде. Но в целом да, не особо описаны и цели и окружение у ТС, т.е. однозначно не сказать. |
19 фев 14, 04:37 [15586792] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |