c#cmd.ExecuteReader()挂断

时间:2017-08-19 11:58:33

标签: c#

我是c#的新手,想在sql server数据库中调用store过程,为此目的写下这段代码:

using (SqlConnection con = new SqlConnection("Data Source=ipaddress;Initial Catalog=database;User ID=userid;Password=password;"))
            {
                using (SqlCommand cmd = new SqlCommand("exec web.sp_getTotalBillPayam "+Convert.ToInt64(phoneNumber) +",'"+password.Trim()+"',72107603,1067", con))
                {
                    con.Open();
                    SqlDataReader reader = cmd.ExecuteReader();
                    ...


当运行该代码时,每件事都没问题,但是存储过程没有返回给我任何结果,转到调试我在这行中实现了运行:

SqlDataReader reader = cmd.ExecuteReader();


但调试器没有进入下一行代码并等待该行运行结束,5分钟后该行未完成并且没有进入下一行代码,会发生什么?我该如何解决这个问题?谢谢。

1 个答案:

答案 0 :(得分:1)

您的命令未附加到您的连接 - 您使用参数是危险的。试试这个:

编辑:对不起,您的命令附加到连接,没有看到被传入。无论哪种方式,这是调用存储过程的正确模式

using (SqlConnection con = new SqlConnection("Data Source=ipaddress;Initial Catalog=database;User ID=userid;Password=password;")) {
    con.Open();
    using (SqlCommand cmd = con.CreateCommand()) {
        cmd.CommandText = "web.sp_getTotalBillPayam";
        cmd.CommandType = System.Data.CommandType.StoredProcedure;

        //repeat this for each parameter
        var parameter = cmd.CreateParameter();
        parameter.ParameterName = "PhoneNumber";    //this must match whatever your parameters are to your stored proc
        parameter.DbType = System.Data.DbType.Int64;
        parameter.Direction = System.Data.ParameterDirection.Input;
        parameter.Value = phoneNumber;
        cmd.Parameters.Add(parameter);

        ...
        //if you have an OUTPUT result from your proc, add a a parameter called RETURNS with a direction of ParameterDirection.Return and check value AFTER executing

        using (SqlDataReader reader = cmd.ExecuteReader()) {
            //if your results are a SELECT query they will be here
        }

    }
}