mysql
  • sql
  • vb.net
  • 2017-07-19 48 views 0 likes 
    0

    我在嘗試在插入語句中添加圖像時出現問題。消息命令文本屬性未正確初始化

    命令文本屬性尚未正確初始化

    出現。我試圖尋找解決方案,但我仍然不知道如何解決它。

    下面的代碼:

    Public Sub Insertplayer() 
        dbconn.ConnectionString = "server='" & My.Settings.ip & "';port=3306; user id='" & My.Settings.uid & "';password='" & My.Settings.pwd & "'; database= '" & My.Settings.db & "';" 
        dbcomm.Connection = dbconn 
        fname = imageurltxt.Text 
        Dim Content As Byte() = ImageToStream(fname) 
        Try 
         dbconn.Open() 
         Dim query As String 
         query = "INSERT INTO `player`(`ID`, `First_Name`, `Last_Name`, `Gender`, `Date_of_Birth`, `Civil_Status`, `Nationality`, `Address`, `Status', `Picture`) VALUES('" + TextBox7.Text + "','" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox9.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "','" + TextBox8.Text + "', @Pic)" 
         dbcomm.Parameters.AddWithValue("@Pic", Content) 
         dbcomm.ExecuteNonQuery() 
         dbcomm = New MySqlCommand(query, dbconn) 
         dbread = dbcomm.ExecuteReader 
         dbread.Close() 
    
        Catch ex As Exception 
         MsgBox(ex.Message) 
        Finally 
         dbconn.Close() 
        End Try 
    End Sub 
    Private Function ImageToStream(ByVal fileName As String) As Byte() 
        Dim stream As New MemoryStream() 
    tryagain: 
        Try 
         Dim image As New Bitmap(fileName) 
         image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg) 
    
        Catch ex As Exception 
         GoTo tryagain 
        End Try 
        Return stream.ToArray() 
    End Function 
    
    +0

    你永遠不應該,連字符串使SQL - *所有*字段shuld使用SQL參數,不使用全局數據庫對象。 'GoTo'是一個非常糟糕的主意。 – Plutonix

    +0

    在調用dbcomm.ExecuteNonQuery() –

    +0

    @AlexanderHiggins之前像這樣初始化它'dbcomm.CommandType = query'它應該是'dbcomm.CommandText = query'。 –

    回答

    0

    以任何方式設置查詢前要調用

    dbcomm.ExecuteNonQuery() 
    

    。您的插入語句僅在該點處作爲名爲query的字符串變量的內容提供。

    目前還不清楚變量dbcomm來自您的代碼示例。

    +0

    感謝您的快速響應dbcomm是我的MySqlCommand – Zetsu

    +0

    是的,我看到了,但你使用'dbcomm = new MySqlCommand(query,dbconn)'初始化它...... –

    0

    你叫dbcomm.ExecuteNonQuery()您設置的命令文本(這發生在寫着dbcomm = New MySqlCommand(query, dbconn)

    INSERT查詢不應該的ExecuteReader()的前行 - 它看起來像你已經嘗試了一些方法來搞不定,試錯,現在還剩在那裏舊的垃圾代碼..

    這裏是一個正確的順序代碼:

    預警,未來民衆:不復制或重複使用此代碼。這是一個特別糟糕的數據庫訪問方式。在本文的後面,我懇求OP來轉儲它,並重新開始使用適當的數據庫訪問庫。

    dbconn.Open() 
        Dim query As String 
        query = "INSERT INTO `player`(`ID`, `First_Name`, `Last_Name`, `Gender`, `Date_of_Birth`, `Civil_Status`, `Nationality`, `Address`, `Status', `Picture`) VALUES('" + TextBox7.Text + "','" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox9.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "','" + TextBox8.Text + "', @Pic)" 
        dbcomm = New MySqlCommand(query, dbconn) 
        dbcomm.Parameters.AddWithValue("@Pic", Content) 
        dbcomm.ExecuteNonQuery() 
        dbconn.Close() 
    

    這一切都應該在一個嘗試捕捉,雖然把dbConn.Close()的最後是一個好主意。您可能想要在關閉它之前檢查連接狀態(以防打開失敗,拋出異常) - 您不希望呼叫失敗

    另外,請考慮拋出所有此代碼使用像nHibernate,Entity Framework,Datasets等對象關係映射器。在這個時代(即最近10年),沒有人應該編寫低級別的數據庫代碼來打開/關閉conenctions並通過將字符串填滿來插入數據的SQL在你的業務邏輯代碼中..所有這一切都是由框架處理的,它知道你的應用程序中的對象,併爲你管理數據庫中的數據。由於類似的原因,編寫自己的數據庫代碼並不酷,因爲沒有人再編寫彙編語言或其他低級別的guff;它會打開應用程序,直到巨大的安全問題,並導致質量較差的代碼難以維護和開發

    附錄:正如Bugs指出的那樣(爲什麼我建議您將所有這些交給專用圖書館來做數據訪問)這個SQL編寫的方式確實很糟糕,並且存在巨大的安全風險。在任何一個文本框中仔細放置撇號,然後是一些特製的SQL和攻擊者可以擦除整個數據庫,轉儲其內容等等。

    +0

    我刪除了Execute Reader,出現一個新的錯誤'Index and Length must refer to一個位於字符串中的位置參數名稱:length'然後當我刪除'dbcomm.ExecuteNonQuery()'時,錯誤消失了,但是我輸入的數據沒有被記錄在數據庫中,另一個問題在'dbcomm.Close ) '你的意思是'dbconn.Close()'? – Zetsu

    +0

    您看到的新錯誤是對某個'string.Substring()'的調用的結果,可能與您的db代碼無關。刪除對ExecuteNonQuery的調用確實會導致沒有任何內容插入到數據庫中,這與將DVD放入播放器但未按下播放按鈕意味着DVD不播放相同。executeNonQuery是執行插入操作的東西查詢。查看我關於使用實體框架的說明;我們不再在這些低級別訪問數據庫;你正在關注90年代的教程 –

    +0

    雖然我很欣賞你正在努力幫助,我還希望**改進**代碼。現在,它已經開放給SQL注入,並且應該在代碼中的帖子中解決。值得考慮的是,用戶會來,而不是閱讀文本,只是複製代碼,希望它的作品 – Bugs

    相關問題