2017-08-19 21 views
-2

我在C#中的新想調用存儲過程在SQL Server數據庫中,爲此寫這樣的代碼:當運行代碼
C#cmd.ExecuteReader()掛斷

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

如果它的存儲過程,執行它作爲命令類型storeprocedure – brykneval

+0

運行存儲過程直接從數據庫從SQL管理工作室與相同的參數? –

+0

@ChetanRanpariya是我的朋友運行直接sp和5分鐘後返回結果 –

回答

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 
     } 

    } 
} 
+0

請等待測試,我的朋友 –

+0

我的朋友不工作你的代碼,不要去這行後的下一行:using(SqlDataReader reader = cmd.ExecuteReader()) –

+0

當然,它不工作,因爲在這裏滾動,蒂姆沒有您的程序中所需的全部信息。但這是你開始工作的開始 –