none
收尋指定資料表 RRS feed

  • 問題

  • 請問各位大大

    我的程式碼

    Dim query As String = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='text'"

    可以找到全部的資料表,未甚麼我把BASE TABLE改成" & TextBox1.Text & " 卻找不到呢??

    2018年4月17日 上午 08:02

解答

  • 我已經找到了資料表

    但是我卻無法使用%來忽略後面的名稱

    Dim query1 As String = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE `TABLE_NAME` = '" & TextBox1.Text & "%' AND TABLE_SCHEMA='text'"



    最好是不要用這種串字串的方式給 SQL 語法條件,這會有 SQL Injection 疑慮,基本上在 Textbox1 上輸入個可以注入 SQL 的語法, 你的資料表就毀了。

    參考下文
    https://social.msdn.microsoft.com/Forums/zh-TW/f7a72d12-90a4-40cc-808a-625f1bdac72e/-sql-injection?forum=236


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 燒腦袋 2018年4月17日 下午 04:02
    2018年4月17日 上午 08:15
    版主
  • 因為要用 like 而不是 = 

    另外,你這種文字串接的寫法會有 sql injection 的問題

    請使用參數化查詢 

    參考

    http://vbnetsample.blogspot.tw/2007/10/using-sqlparameter-class.html

    • 已標示為解答 燒腦袋 2018年4月17日 下午 04:03
    2018年4月17日 上午 08:17
  • 謝謝 Bill Chung 跟 Coding Kid Peter Chang 兩位大大的教導

    我看了Coding Kid Peter Chang給的網址,Bill Chung的回家看,參考一些影片,稍微想了一下,我的程式碼是

    Dim dtable As New MySqlDataAdapter
                Dim ddd As New DataTable
                conn.Open()
                cmd = conn.CreateCommand
                cmd.CommandText = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE `TABLE_NAME` like @Time AND TABLE_SCHEMA='text'"
                cmd.Parameters.AddWithValue("@Time", Time)
                dtable = New MySqlDataAdapter(cmd)
                dtable.Fill(ddd)
                DataGridView2.DataSource = ddd
    這樣不知道有沒有 sql injection的問題,或者是根本有問題
    不過我不知道要怎麼把%放進去了

    • 已標示為解答 燒腦袋 2018年4月17日 下午 04:02
    2018年4月17日 上午 08:54

所有回覆

  • 我已經找到了資料表

    但是我卻無法使用%來忽略後面的名稱

    Dim query1 As String = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE `TABLE_NAME` = '" & TextBox1.Text & "%' AND TABLE_SCHEMA='text'"



    • 已編輯 燒腦袋 2018年4月17日 上午 08:11
    2018年4月17日 上午 08:10
  • 我已經找到了資料表

    但是我卻無法使用%來忽略後面的名稱

    Dim query1 As String = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE `TABLE_NAME` = '" & TextBox1.Text & "%' AND TABLE_SCHEMA='text'"



    最好是不要用這種串字串的方式給 SQL 語法條件,這會有 SQL Injection 疑慮,基本上在 Textbox1 上輸入個可以注入 SQL 的語法, 你的資料表就毀了。

    參考下文
    https://social.msdn.microsoft.com/Forums/zh-TW/f7a72d12-90a4-40cc-808a-625f1bdac72e/-sql-injection?forum=236


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 燒腦袋 2018年4月17日 下午 04:02
    2018年4月17日 上午 08:15
    版主
  • 因為要用 like 而不是 = 

    另外,你這種文字串接的寫法會有 sql injection 的問題

    請使用參數化查詢 

    參考

    http://vbnetsample.blogspot.tw/2007/10/using-sqlparameter-class.html

    • 已標示為解答 燒腦袋 2018年4月17日 下午 04:03
    2018年4月17日 上午 08:17
  • 謝謝 Bill Chung 跟 Coding Kid Peter Chang 兩位大大的教導

    我看了Coding Kid Peter Chang給的網址,Bill Chung的回家看,參考一些影片,稍微想了一下,我的程式碼是

    Dim dtable As New MySqlDataAdapter
                Dim ddd As New DataTable
                conn.Open()
                cmd = conn.CreateCommand
                cmd.CommandText = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE `TABLE_NAME` like @Time AND TABLE_SCHEMA='text'"
                cmd.Parameters.AddWithValue("@Time", Time)
                dtable = New MySqlDataAdapter(cmd)
                dtable.Fill(ddd)
                DataGridView2.DataSource = ddd
    這樣不知道有沒有 sql injection的問題,或者是根本有問題
    不過我不知道要怎麼把%放進去了

    • 已標示為解答 燒腦袋 2018年4月17日 下午 04:02
    2018年4月17日 上午 08:54
  • cmd.Parameters.AddWithValue("@Time", Time + "%")

    像是這樣 try it

    2018年4月17日 下午 03:02
  • 謝謝您:)
    2018年4月17日 下午 04:02