2014-01-16 140 views
0

我遇到問題,我不知道問題出在哪裏。當我輸入詳細信息並單擊我的REGISTER頁面上的提交按鈕時,我的視覺工作室拋出異常。我不知道問題就出在我的SQL查詢或我code.So我張貼既將數據類型nvarchar轉換爲int時出錯

這是我的SQL查詢:

  protected void btnRegSubmit_Click(object sender, EventArgs e) 
      { 
     if (Page.IsValid) 
      { 
      string CS = ConfigurationManager.ConnectionStrings["AK"].ConnectionString; 
      using (SqlConnection con = new SqlConnection(CS)) 
      { 
      SqlCommand cmd = new SqlCommand("spRegisteredUsers", con); 
      cmd.CommandType = CommandType.StoredProcedure; 

      SqlParameter Name = new SqlParameter("@Name", txtRegName.Text); 
      SqlParameter UserName = new SqlParameter("@UserName", txtRegUsername.Text); 
      SqlParameter Password = new SqlParameter("@Password", txtRegPassword.Text); 
      SqlParameter ContactNo = new SqlParameter("@ContactNo", txtRegContact.Text); 
      SqlParameter Email = new SqlParameter("@Email", txtRegEmail.Text); 

      cmd.Parameters.Add(Name); 
      cmd.Parameters.Add(UserName); 
      cmd.Parameters.Add(Password); 
      cmd.Parameters.Add(ContactNo); 
      cmd.Parameters.Add(Email); 

      con.Open(); 
      int ReturnCode = Convert.ToInt32(cmd.ExecuteScalar().ToString()); 
      if (ReturnCode == -1) 
      { 
       lblMessage.Text = "UserName already exists."; 
      } 
      else 
      { 
       Response.Redirect("~/Login.aspx"); 
      } 
     } 
    } 

} 

 Create proc spRegisteredUsers 

     @Name nvarchar(100), 
     @UserName nvarchar(100), 
     @Password nvarchar(200), 
     @ContactNo int, 
     @Email nvarchar(200) 
     as 
     Begin 

     Declare @Count int 
     Declare @ReturnCode int 

     Select @Count = COUNT(UserName) 
     from tblRegisteredUsers where [email protected] 
     if @Count>0 
     Begin 
     Set @ReturnCode= -1 
     End 
     Else 
     Begin 
     Set @ReturnCode= 1 
     Insert into tblRegisteredUsers values(@Name,@UserName,@Password,@ContactNo,@Email) 
     End 
     Select @ReturnCode as ReturnValue 
     End 

,而我在下面的橫線得到一個異常我看到了一個有趣的事情。當我從表,存儲過程和cs代碼中刪除名稱和聯繫人字段。

+1

什麼是錯誤? – Amit

+1

沒有多大用處,發佈完整的錯誤,以及如何向您的命令添加參數? –

+0

將數據類型nvarchar轉換爲int時出錯。 – Mash

回答

2

試試這個:

using (SqlConnection con = new SqlConnection(CS)) 
      { 
      SqlCommand cmd = new SqlCommand("spRegisteredUsers", con); 
      cmd.CommandType = CommandType.StoredProcedure; 
      //use long instead... 
      long Contact = Convert.ToInt64(txtRegContact.Text); //convert to long here 

      SqlParameter Name = new SqlParameter("@Name", txtRegName.Text); 
      SqlParameter UserName = new SqlParameter("@UserName", txtRegUsername.Text); 
      SqlParameter Password = new SqlParameter("@Password", txtRegPassword.Text); 

      SqlParameter ContactNo = new SqlParameter("@ContactNo", Contact); 

      SqlParameter Email = new SqlParameter("@Email", txtRegEmail.Text); 
      ...... 

你傳遞一個字符串和SQL過程需要int作爲ContactNo。

+0

現在我得到一個完全不同的錯誤「值對Int32太大或太小。」所以我把表格和存儲過程中的contactno從int更改爲bigint。但是,我沒有更改代碼。 – Mash

+0

'bigint'更改後出現錯誤嗎?也許最好有一個'varchar'聯繫信息? – Milen

+0

我也在bigint變更後得到相同的錯誤訊息 – Mash

0

您可能會在第一行發生錯誤。試試這個:

int ReturnCode = Convert.ToInt32(cmd.ExecuteScalar().ToString()); 
+0

它沒有幫助。當我嘗試提交詳細信息時,我收到了相同的舊錯誤消息。 – Mash

+0

ExecuteScalar()返回無法轉換爲int的內容,因此您看到錯誤。所以你可以檢查的第一件事是ExecuteScalar()真的返回。你可以使用調試器,或者輸出「ExecuteScalar()。GetType()。ToString()」,這會給你返回的類型。 – Zafua

+0

確定會做那個。同時,我已經發布了整個code.please檢查是否有幫助。 – Mash

相關問題