none
DataReader 讀取不到問題? RRS feed

  • 問題

  • 執行if那端的reader正常

    跑到else的reader都是else,不管怎麼改都一樣。

    請問是程式錯嗎?

     dataGridView2.Visible = true;
                using (SqlConnection cn = new SqlConnection
                   (Properties.Settings.Default.BorrorSystemConnectionString))
                {
                    cn.Open();
                    #region 檢查總表是否借出
                    string selectCmd = "SELECT * FROM 總表 WHERE 機種料號 = @name AND 借用狀態 = @yorn";
                    // 建立SqlCommand物件cmd
                    SqlCommand cmd = new SqlCommand(selectCmd, cn);
                    cmd.Parameters.AddWithValue("@name", textboxmachine.Text);
                    cmd.Parameters.AddWithValue("@yorn", "可借用");
                    // 傳回查詢結果的SqlDataRadedr物件dr
                    cmd.Connection = cn;
                    SqlDataReader dr = cmd.ExecuteReader();
                    #endregion
    
                    if (dr.Read())   // 若有該筆記錄則執行下面敘述
                    {
                        //圖&datagridview顯示
    
                        #region 總表借用顯示
                        dr.Close();
                        string borrorshow = "SELECT * FROM 總表 WHERE 機種料號 = @machnum";
                        SqlCommand com = new SqlCommand(borrorshow);
                        com.Parameters.AddWithValue("@machnum", textboxmachine.Text);
                        com.Connection = cn;
                        SqlDataAdapter danumber = new SqlDataAdapter();
                        danumber.SelectCommand = com;
                        DataSet ds = new DataSet();
                        danumber.Fill(ds, "總表");
                        dataGridView2.DataSource = ds.Tables["總表"];
                        #endregion                   
    
                        #region 顯示,隱藏區
                        dataGridView2.Visible = true;
                        panel1.Visible = true;
    
                        //----------------------------
                        tableLayoutPanel1.Visible = false;
                        btnsearch.Enabled = false;
                        textboxmachine.Enabled = false;
                        textBoxpaper.Enabled = false;
                        label11.Visible = false;
                        labelbor.Enabled = false;
                        labelret.Enabled = false;
                        labelman.Enabled = false;
                        labelser.Enabled = false;
                        textBoxkeyin.Visible = true;
                        label12.Visible = true;
                        label13.Visible = true;
                        #endregion
    
                        pictureBox3.Tag = 1;
                        timer1.Start();
                    }
                    else
                    {
                      
                        #region 機種檢查
                        dr.Close();
                        string selectCom = "SELECT 機種料號,借用狀態 FROM 總表 WHERE 機種料號 = @name AND 借用狀態 = @yorn";                    
                        SqlCommand com = new SqlCommand(selectCom, cn);
                        com.Parameters.AddWithValue("@name", textboxmachine.Text);
                        com.Parameters.AddWithValue("@yorn", "出借中!");                    
                        cmd.Connection = cn;
                        SqlDataReader da = cmd.ExecuteReader();
                        if (da.Read())
                        {
    
                            MessageBox.Show("此機種已借出");
                            借用系統 借用系統 = new 借用系統();
                            this.Hide();
                            借用系統.Show();
                        }
                        else
                        {
                            dataGridView2.Visible = false;
                            MessageBox.Show("查無此機種,請重新輸入");
                            return;
                        }
                    }
                        #endregion
                }
    

    2014年12月18日 上午 03:48

解答

  • 建議你用代碼方式放進資料庫,不要使用 "畫面上顯示的文字"。

    畫面上顯示的文字不是資料庫的職責,誰負責什麼應該要一清二楚,而不是把畫面要負責的事丟給資料庫做。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 XX阿忠XX 2014年12月19日 上午 12:51
    2014年12月18日 上午 04:11
    版主
  • 小朱的意思是 , 你現在直接拿畫面上的 "出借中" 三個字存到資料庫去

    改天畫面想改成 "已出借" , 那你的資料庫裡的資料是不是又要改一次?

    通常資料庫我們不會這樣做 , 會用所謂的代碼 , 例如 A,B,C 或 01,02,03 來表示狀態 

    舉例來說 01 = 出借中  02=在庫 , 當你畫面想改成 "已出借" , 那是畫面自已的事 , 程式只要拿到01就判斷轉成畫面想要的文字



    微軟免費線上課程

    HTML5 & JavaScript程式開發實戰(MyBook)

    開發ASP.NET您要瞭解的基楚

    http://www.dotblogs.com.tw/ian (MyBlog)

    • 已標示為解答 XX阿忠XX 2014年12月19日 上午 12:51
    2014年12月18日 上午 05:54

所有回覆

  • com.Parameters.AddWithValue("@yorn", "出借中!");       

    試試把上面的改一下

    SqlParameter param = com.Parameters.AddWithValue("@yorn", "出借中!");        
    param.SqlDbType = SqlDbType.NVarChar;


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    請記得將對您有幫助的回覆標示為解答以幫助其他尋找解答及參與社群討論的朋友們。
    Please remember to clickMark as Answer on the post that helps you. This can be beneficial to other community members reading the thread.

    2014年12月18日 上午 04:10
  • 建議你用代碼方式放進資料庫,不要使用 "畫面上顯示的文字"。

    畫面上顯示的文字不是資料庫的職責,誰負責什麼應該要一清二楚,而不是把畫面要負責的事丟給資料庫做。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 XX阿忠XX 2014年12月19日 上午 12:51
    2014年12月18日 上午 04:11
    版主
  • 是兩個command衝突嗎?

    我把他拉出來用button執行就可以

    2014年12月18日 上午 05:18
  • 請問前輩,代碼的意思是?

    有範例可以給我參考嗎,感謝

    2014年12月18日 上午 05:19
  • 小朱的意思是 , 你現在直接拿畫面上的 "出借中" 三個字存到資料庫去

    改天畫面想改成 "已出借" , 那你的資料庫裡的資料是不是又要改一次?

    通常資料庫我們不會這樣做 , 會用所謂的代碼 , 例如 A,B,C 或 01,02,03 來表示狀態 

    舉例來說 01 = 出借中  02=在庫 , 當你畫面想改成 "已出借" , 那是畫面自已的事 , 程式只要拿到01就判斷轉成畫面想要的文字



    微軟免費線上課程

    HTML5 & JavaScript程式開發實戰(MyBook)

    開發ASP.NET您要瞭解的基楚

    http://www.dotblogs.com.tw/ian (MyBlog)

    • 已標示為解答 XX阿忠XX 2014年12月19日 上午 12:51
    2014年12月18日 上午 05:54
  • 了解,感謝指點
    2014年12月19日 上午 12:52