使用ADO.Net的输入参数调用存储过程时出错

时间:2010-06-07 16:14:09

标签: c# .net sql-server-2008 stored-procedures ado.net

我正在使用VSTS 2008 + C#+。Net 3.5 + ADO.Net。这是我的代码和相关的错误消息。错误消息显示,@ Param1未提供,但实际上它是在我的代码中提供的。有什么想法是错的吗?

  

System.Data.SqlClient.SqlException:   过程或函数'Pr_Foo'期望   参数'@Param1',但不是   提供。

class Program
{
        private static SqlCommand _command;
        private static SqlConnection connection;

        private static readonly string _storedProcedureName = "Pr_Foo";
        private static readonly string connectionString = "server=.;integrated Security=sspi;initial catalog=FooDB";

        public static void Prepare()
        {
            connection = new SqlConnection(connectionString);
            connection.Open();
            _command = connection.CreateCommand();
            _command.CommandText = _storedProcedureName;
            _command.CommandType = CommandType.StoredProcedure;
        }

        public static void Dispose()
        {
            connection.Close();
        }

        public static void Run()
        {
            try
            {
                SqlParameter Param1 = _command.Parameters.Add("@Param1", SqlDbType.Int, 300101);
                Param1.Direction = ParameterDirection.Input;
                SqlParameter Param2 = _command.Parameters.Add("@Param2", SqlDbType.Int, 100);
                portal_SiteInfoID.Direction = ParameterDirection.Input;
                SqlParameter Param3 = _command.Parameters.Add("@Param3", SqlDbType.Int, 200);
                portal_RoleInfoID.Direction = ParameterDirection.Input;

                _command.ExecuteScalar();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }

        static void Main(string[] args)
        {
            try
            {
                Prepare();

                Thread t1 = new Thread(Program.Run);
                t1.Start();
                t1.Join();

                Dispose();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + "\t" + ex.StackTrace);
            }
        }
    }

提前致谢,

乔治

3 个答案:

答案 0 :(得分:2)

您没有为参数添加值。 Add的签名是Add(string parameterName,SqlDbType type,int size)... last参数是size,而不是value。你可以使用方法AddWithValue。

MSDN Article

答案 1 :(得分:2)

尝试通过以下代码替换您的功能并检查:

public static void Run()
        {
            try
            {
                _command.Parameters.AddWithValue("@Param1", 300101);
                _command.Parameters.AddWithValue("@Param2", 100);
                _command.Parameters.AddWithValue("@Param3", 200);

                _command.ExecuteScalar();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }

答案 2 :(得分:1)

尝试从.Add语句中取出“@”符号。添加参数时,我从不添加@。

例如:

SqlParameter Param1 = _command.Parameters.Add("Param1", SqlDbType.Int, 300101);