2013-08-03 23 views
1

這是我的代碼,當文本框內容的變化都需要從DATABSE檢索並在指定的標籤顯示的DATAS。「變量名稱在查詢批處理或存儲過程中必須是唯一的。」錯誤C#asp.net

protected void TextBox1_TextChanged(object sender, EventArgs e) 
{ 
    Match match = Regex.Match(TextBox1.Text, @"^\d{4}[A-Z]{5}\d{3}$"); 
    if (match.Success) 
    { 
     try 
     { 
      DropDownList1.Focus(); 
      string dpt = (string)Session["deptmnt"]; 
      idd = TextBox1.Text; 
      Label33.Text = idd; 
      string val = idd; 
      string con = ConfigurationManager.ConnectionStrings["con"].ConnectionString; 
      SqlConnection con1 = new SqlConnection(con); 
      con1.Open(); 
      // string val1 = dpt; 
      try 
      { 

      String str = "SELECT * from student where [email protected]"; 
      SqlCommand cmd = new SqlCommand(str, con1); 
      cmd.CommandType = CommandType.Text; 
      SqlParameter sql; 
      cmd.Parameters.Clear(); 
      sql = cmd.Parameters.Add("@val", SqlDbType.VarChar, 20); 
      sql.Value = val; 
      SqlDataReader reader = cmd.ExecuteReader(); 
      if (reader.HasRows == false) 
      { 
       Label35.Visible = true; 
       TextBox1.Text = ""; 
      } 
      else 
      { 
       { 
        Panel3.Visible = true; 
        DropDownList1.Focus(); 
        while (reader.Read()) // if can read row from database 
        { 
         Panel3.Visible = true; 
         Label3.Text = reader["sname"].ToString(); 
         Label5.Text = reader["dept"].ToString(); 
         Label25.Text = reader["yr"].ToString(); 
        } 
        cmd.Parameters.Clear(); 


        { 

         string val1 = idd; 
         string str2 = "SELECT bid from studentissuebook where [email protected] AND status='" + "lost" + "'"; 
         SqlCommand cmd2 = new SqlCommand(str2, con1); 
         cmd2.CommandType = CommandType.Text; 
         cmd2.Parameters.Clear(); 
         SqlParameter sql2; 
         sql2 = cmd2.Parameters.Add("@val1", SqlDbType.VarChar, 20); 
         sql2.Value = val1; 
         SqlDataReader reader1 = cmd2.ExecuteReader(); 
         if (reader1.HasRows == false) 
         { 
          TextBox1.Text = ""; 
          Label39.Visible = true; 
          Panel3.Visible = false; 
         } 
         else 
         { 
          DropDownList1.Focus(); 
          while (reader1.Read()) // if can read row from database 
          { 

           DropDownList1.Items.Add(reader1[0].ToString()); 
          } 

          DropDownList1.Focus(); 
         } 
        } 
       } 
      } 
      con1.Close(); 
      } 
      catch(Exception ex) 
      { 
      TextBox1.Text=ex.ToString(); 
      } 
     } 
     catch (Exception ex) 
     { 
      TextBox1.Text = ex.ToString(); 
     } 

     } else 

    { 
     formatlabel.Visible = true; 
    } 
} 

但是,當我運行代碼,我得到一個錯誤「變量名‘@sid’已聲明。變量名必須是查詢批處理或存儲過程中是獨一無二的。」,我用Google搜索,當有一個for循環或循環一般發生這個錯誤,但我沒有在我的code.so IM無法找到病因

+1

你的代碼是所有混亂爲什麼要使用這麼多的連接,即使有一個單獨的連接同樣的錯誤occurs..so PLZ建議一些其它的解決方案 – Alok

+0

@alok。 – user2605748

+0

@prix遺憾不知道,從現在開始,我西港島線謝謝:) – user2605748

回答

1

嘗試使用兩個單獨的連接和命令的對象任何循環,像這樣:

protected void TextBox1_TextChanged(object sender, EventArgs e) 
{ 
    Match match = Regex.Match(TextBox1.Text, @"^\d{4}[A-Z]{5}\d{3}$"); 
    if (match.Success) 
    { 
     DropDownList1.Focus(); 
     string dpt = (string) Session["deptmnt"]; 
     idd = TextBox1.Text; 
     Label33.Text = idd; 
     string val = idd; 
     string con = ConfigurationManager.ConnectionStrings["con"].ConnectionString; 
     using (SqlConnection con1 = new SqlConnection(con)) 
     { 
      String str = "SELECT * from student where [email protected]"; 
      con1.Open(); 
      using (SqlCommand cmd = new SqlCommand(str, con1)) 
      { 
       cmd.CommandType = CommandType.Text; 
       SqlParameter sql; 
       cmd.Parameters.Clear(); 
       sql = cmd.Parameters.Add("@val", SqlDbType.VarChar, 20); 
       sql.Value = val; 
       SqlDataReader reader = cmd.ExecuteReader(); 
       if (reader.HasRows == false) 
       { 
        Label35.Visible = true; 
        TextBox1.Text = ""; 
       } 
       else 
       { 
        Panel3.Visible = true; 
        DropDownList1.Focus(); 
        while (reader.Read()) // if can read row from database 
        { 
         Panel3.Visible = true; 
         Label3.Text = reader["sname"].ToString(); 
         Label5.Text = reader["dept"].ToString(); 
         Label25.Text = reader["yr"].ToString(); 
        } 
        cmd.Parameters.Clear(); 
       } 
      } 
     } 

     using (SqlConnection con2 = new SqlConnection(con)) 
     { 
      string val1 = idd; 
      string str2 = "SELECT bid from studentissuebook where [email protected] AND status='" + "lost" + "'"; 
      con2.Open(); 
      using (SqlCommand cmd2 = new SqlCommand(str2, con2)) 
      { 
       cmd2.CommandType = CommandType.Text; 
       cmd2.Parameters.Clear(); 
       SqlParameter sql2; 
       sql2 = cmd2.Parameters.Add("@val1", SqlDbType.VarChar, 20); 
       sql2.Value = val1; 
       SqlDataReader reader1 = cmd2.ExecuteReader(); 
       if (reader1.HasRows == false) 
       { 
        TextBox1.Text = ""; 
        Label39.Visible = true; 
        Panel3.Visible = false; 
       } 
       else 
       { 
        DropDownList1.Focus(); 
        while (reader1.Read()) // if can read row from database 
        { 
         DropDownList1.Items.Add(reader1[0].ToString()); 
        } 
        DropDownList1.Focus(); 
       } 
      } 
     } 
    } 
    else 
    { 
     formatlabel.Visible = true; 
    } 
} 

注:我已刪除您try-catch塊,使代碼更易於解釋,一旦它工作,那麼請在您認爲合適的地方重新應用您的try-catch邏輯。另外,我補充using塊爲SqlConnectionSqlCommand對象,這將清理連接,即使發生異常。

+0

thanq @karl安德森,但是,如果我跑我得到一個錯誤:「ExecuteReader需要開放和可用連接的連接的當前狀態爲關閉。 「。我試圖打開連接(con.Open())仍然是相同的錯誤即將到來。我不是在SQL或。NET的expret,所以請幫助。 – user2605748

+0

已更新代碼以包含連接對象的'.Open()'調用,如果您明確打開每個連接,是否還會收到錯誤? –

+0

謝謝你這麼多的錯誤被清除:) – user2605748

相關問題