Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c上的exec存储过程错误_C#_Sql Server 2008 - Fatal编程技术网

C# c上的exec存储过程错误

C# c上的exec存储过程错误,c#,sql-server-2008,C#,Sql Server 2008,我正在尝试在c上执行SP并获得该错误 System.Data.SqlClient.SqlException: Procedure or function 'usp_Registrations_Insert' expects parameter '@RegistrationID', which was not supplied. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean

我正在尝试在c上执行SP并获得该错误

    System.Data.SqlClient.SqlException: Procedure or function 'usp_Registrations_Insert' expects parameter '@RegistrationID', which was not supplied.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at C2DMwebService.C2DM.RegisterDevice(String DeviceID, String RegistrationId) in c:\users\eyal\documents\visual studio 2010\Projects\C2DMwebService\C2DMwebService\C2DM.asmx.cs:line 52
我执行的代码是

SqlCommand cmd = new SqlCommand();
                string connStr = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
                SqlConnection con = new SqlConnection(connStr);
                //cmd.Parameters.Add("@RegistrationID", SqlDbType.NVarChar).Value = RegistrationId;
                //cmd.Parameters.Add("@DeviceID", SqlDbType.NVarChar).Value = DeviceID;

                //cmd.Parameters.Add(new SqlParameter("@RegistrationID", RegistrationId));
                //cmd.Parameters.Add(new SqlParameter("@DeviceID", DeviceID));

                SqlParameter myParm1 = cmd.Parameters.Add("@RegistrationID", SqlDbType.NVarChar, 200);
                myParm1.Value = RegistrationId;

                SqlParameter myParm2 = cmd.Parameters.Add("@DeviceID", SqlDbType.NVarChar, 200);
                myParm2.Value = DeviceID;

                cmd = new SqlCommand("usp_Registrations_Insert", con);
                cmd.CommandType = CommandType.StoredProcedure;
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
我的SP


您正在创建一个新命令,然后再执行它。这将处理刚刚添加到创建的第一个命令中的所有参数


移动命令行cmd=newsqlcommandusp\u Registrations\u Insert,con;直到顶部,就在SqlConnection con=newsqlconnectionconstr之后;行,你应该没事。您可以删除第一个cmd=newsqlcommand;行。

到顶部-但在创建连接之后。@KirkWoll感谢您的澄清。我更新了答案。他的方式,保持了新命令的味道。也许这比功能更重要=
ALTER PROCEDURE dbo.usp_Registrations_Insert
    (
    @RegistrationID NVarChar(200),
    @DeviceID NVarChar(200)
    )
AS
    /* SET NOCOUNT ON */

    INSERT INTO Registrations
                         (RegistrationID, DeviceID)
VALUES        (@RegistrationID,@DeviceID)
    RETURN @@rowcount;