参数未传递给SQL过程

时间:2017-03-24 13:51:13

标签: sql-server stored-procedures parameter-passing

我需要在这里进行健全性检查....我有一个非常简单的ExecuteNonQuery。我正在将值传递给sproc,但它仍然返回一个错误,即第一个值甚至没有通过。

 using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
                {
                    sqlConnection.Open();
                    using (SqlCommand sqlCommandLogError = new SqlCommand("MyStoredProc", sqlConnection))
                    {
                        sqlCommandLogError.Parameters.AddWithValue("logEntry", logEntry);
                        sqlCommandLogError.Parameters.AddWithValue("EventLogEntryType", EventLogEntryType);
                        sqlCommandLogError.Parameters.AddWithValue("EventID", eventId);
                        sqlCommandLogError.ExecuteNonQuery();

                }
            }

我验证了该过程中存在的参数 我在程序中将它们弄清楚,以确保实际上sproc中的字段是正确的并且它有效(它将所有空值放在数据库中)

任何想法为什么程序认为没有参数通过?

更新问题尽管回答这个问题但我很乐意听取一些专家的意见:@symbol是否需要参数(似乎没有),为什么它甚至会找到我的sproc没有输入命令类型。

3 个答案:

答案 0 :(得分:1)

请试试这个。同时将@添加到密钥名称。

using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
{
   sqlConnection.Open();
   using (SqlCommand sqlCommandLogError = new SqlCommand("MyStoredProc",
          sqlConnection))
   {
      sqlCommandLogError.CommandType = CommandType.StoredProcedure;

      sqlCommandLogError.Parameters.AddWithValue("@logEntry", logEntry);
      sqlCommandLogError.Parameters.AddWithValue("@EventLogEntryType",
                                              EventLogEntryType);
      sqlCommandLogError.Parameters.AddWithValue("@EventID", eventId);

      sqlCommandLogError.ExecuteNonQuery();
   }
}

答案 1 :(得分:0)

很难得出准确的答案,因为SQL Server存储过程的源代码" MyStoredProc"没有附上。根据可用信息,您的存储过程参数名称应以" @"开头。字符。

答案 2 :(得分:0)

您应该使用@和SqlType传递参数名称,如下所示:

using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
            {
                sqlConnection.Open();
                using (SqlCommand sqlCommandLogError = new SqlCommand("MyStoredProc", sqlConnection))
                {
                    sqlCommandLogError.Parameters.Add(new SqlParameter("@logEntry", SqlDbType.YourParamType) {Value = logEntry});
                    sqlCommandLogError.Parameters.Add(new SqlParameter("@EventLogEntryType", SqlDbType.YourParamType) {Value = EventLogEntryType});
                    sqlCommandLogError.Parameters.Add(new SqlParameter("@EventID", SqlDbType.YourParamType) {Value = eventId});

                    sqlCommandLogError.ExecuteNonQuery();

            }
        }