none
請問vb2008如何宣告為純量變數? RRS feed

  • 問題

  • 各位大大 我將pictureBox1,picturebox2 ,picturebox3的圖要存入SQL中但出現 @Bt ,@B未宣告為純量變數  請問如何宣告?但是Byets那個就沒問題

            Dim Stream, Str, St As New IO.MemoryStream
            PB1.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Jpeg)
            Stream.Flush()
            Dim Bytes As Byte() = Stream.ToArray

            PB2.Image.Save(Str, System.Drawing.Imaging.ImageFormat.Jpeg)
            Str.Flush()
            Dim Bt As Byte() = Str.ToArray

            PB3.Image.Save(St, System.Drawing.Imaging.ImageFormat.Jpeg)
            St.Flush()
            Dim B As Byte() = St.ToArray

            Dim SQL As String = "insert into PURPR(ProID,ProName,EmpName,KindName,TypeName,ProCol,ProMat,ProAreaName,CarryName,ProP,ProP1,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15) values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox18.Text + "','" + ComboBox1.Text + "','" + ComboBox2.Text + "','" + ComboBox3.Text + "','" + ComboBox4.Text + "','" + ComboBox5.Text + "','" + ComboBox6.Text + "',@bytes,@Bt,@B,'" + TextBox4.Text + "','" + TextBox7.Text + "','" + TextBox8.Text + "','" + TextBox5.Text + "','" + TextBox9.Text + "','" + TextBox10.Text + "','" + TextBox6.Text + "','" + TextBox11.Text + "','" + TextBox3.Text + "','" + TextBox12.Text + "','" + TextBox13.Text + "','" + TextBox15.Text + "','" + TextBox14.Text + "','" + TextBox16.Text + "','" + TextBox17.Text + "')"
            Dim command, cm, cn As New SqlClient.SqlCommand(SQL, conn)
            command.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            cm.Parameters.Add("@Bt", SqlDbType.Binary, 25480).Value = Bt
            cn.Parameters.Add("@B", SqlDbType.Binary, 25480).Value = B
            command.ExecuteNonQuery()

    感謝指教

    2009年11月19日 上午 03:48

解答

  • mStream1.Write(Bytes1, 0, Bytes1.Length)
    Dim Img1 As New Bitmap(mStream1)
    
    mStream2.Write(Bytes2, 0, Bytes2.Length)
    Dim Img2 As New Bitmap(mStream2)

    應該是這四列的問題,MemoryStream都弄成第一張圖了...




    • 已標示為解答 MichaelTsai10 2009年11月19日 上午 09:43
    2009年11月19日 上午 09:04

所有回覆

  • 各位大大:我將三個不同的圖分別表示在三個picturebox中,但每次存入SQL的圖都是同一個,請問我要如何改寫才能將三個圖分別存入三個SQL的image欄位中 感謝各位的指教 請各位將程式碼寫出來  因本人不是很聰明

            Dim Stream, Str,St As New IO.MemoryStream
            PB1.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Jpeg)
            Stream.Flush()
            Dim Bytes As Byte() = Stream.ToArray

            PB2.Image.Save(Str, System.Drawing.Imaging.ImageFormat.Jpeg)
            Str.Flush()
            Dim Bt As Byte() = Str.ToArray
           
            PB3.Image.Save(St, System.Drawing.Imaging.ImageFormat.Jpeg)
            Str.Flush()
            Dim B As Byte() = St.ToArray

            Dim SQL As String = "insert into PURPR(ProID,ProName,EmpName,KindName,TypeName,ProCol,ProMat,ProAreaName,CarryName,ProP,ProP1,ProP2,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15) values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox18.Text + "','" + ComboBox1.Text + "','" + ComboBox2.Text + "','" + ComboBox3.Text + "','" + ComboBox4.Text + "','" + ComboBox5.Text + "','" + ComboBox6.Text + "',@bytes,@bytes,@bytes,'" + TextBox4.Text + "','" + TextBox7.Text + "','" + TextBox8.Text + "','" + TextBox5.Text + "','" + TextBox9.Text + "','" + TextBox10.Text + "','" + TextBox6.Text + "','" + TextBox11.Text + "','" + TextBox3.Text + "','" + TextBox12.Text + "','" + TextBox13.Text + "','" + TextBox15.Text + "','" + TextBox14.Text + "','" + TextBox16.Text + "','" + TextBox17.Text + "')"
           
            Dim command, cm,cn As New SqlClient.SqlCommand(SQL, conn)
            command.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            command.ExecuteNonQuery()

            cm.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            cm.ExecuteNonQuery()

            cn.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            cn.ExecuteNonQuery()

    如果有那位大大高手知道請告訴我 無限感激

    • 已合併 璉璉Moderator 2009年11月19日 上午 04:22 我討厭一文多貼
    2009年11月18日 下午 02:12
  • 詢問一下

    你的SQL 語法中,是故意 ,@bytes,@bytes,@bytes, 放一樣的資訊嗎?


            command.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            command.ExecuteNonQuery()

            cm.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            cm.ExecuteNonQuery()

            cn.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            cn.ExecuteNonQuery()

    為什麼都是放變數Bytes,你的變數 Bt 與 B 沒有放進去?

    也許可以
    ,@b1,@b2,@b3, 


            cn.Parameters.Add("@b1", SqlDbType.Binary).Value = Bytes 
            cn.Parameters.Add("@b2", SqlDbType.Binary).Value = Bt
            cn.Parameters.Add("@b3", SqlDbType.Binary).Value = B
            cn.ExecuteNonQuery()


    可以參考
    [ADO.NET] 為何 / 如何 使用 SQLParameter 物件
    2009年11月18日 下午 03:06
    版主
  •         Dim SQL As String = "insert into PURPR(ProID,ProName,EmpName,KindName,TypeName,ProCol,ProMat,ProAreaName,CarryName,ProP,ProP1,ProP2,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15) values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox18.Text + "','" + ComboBox1.Text + "','" + ComboBox2.Text + "','" + ComboBox3.Text + "','" + ComboBox4.Text + "','" + ComboBox5.Text + "','" + ComboBox6.Text + "',@bytes,@bt,@b,'" + TextBox4.Text + "','" + TextBox7.Text + "','" + TextBox8.Text + "','" + TextBox5.Text + "','" + TextBox9.Text + "','" + TextBox10.Text + "','" + TextBox6.Text + "','" + TextBox11.Text + "','" + TextBox3.Text + "','" + TextBox12.Text + "','" + TextBox13.Text + "','" + TextBox15.Text + "','" + TextBox14.Text + "','" + TextBox16.Text + "','" + TextBox17.Text + "')"
            Dim command, cm, cn As New SqlClient.SqlCommand(SQL, conn)
    
            command.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            command.Parameters.Add("@bt", SqlDbType.Binary).Value = Bt
            command.Parameters.Add("@b", SqlDbType.Binary).Value = B
            command.ExecuteNonQuery()

    SqlCommand.Parameters 屬性

    因為您三個參數名都一樣,只會存第一個圖,既然是同一個資料表,執行一次命令就好,Parameters的用法,自己去研究,全部都參數化,可避免一些麻煩...
    2009年11月18日 下午 03:08
  •        親愛的Joe大大 我把程式碼改為下列,但是卻發生了必需宣告@Bt  @B為純量變數  但我遍尋網頁就是不知該如何宣告為純量變數,可否請妳高抬貴手幫一下不聰明的我一個忙。幫我修改一下 怎樣才能將Picturebox1,picturebox2,picturebox3 以二近位方式存入sql中  感謝您。如果有其它大大知道的話也請您幫一下忙  感謝您
           Dim Stream, Str, St As New IO.MemoryStream
            PB1.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Jpeg)
            Stream.Flush()
            Dim Bytes As Byte() = Stream.ToArray

            PB2.Image.Save(Str, System.Drawing.Imaging.ImageFormat.Jpeg)
            Str.Flush()
            Dim Bt As Byte() = Str.ToArray

            PB3.Image.Save(St, System.Drawing.Imaging.ImageFormat.Jpeg)
            St.Flush()
            Dim B As Byte() = St.ToArray

            Dim SQL As String = "insert into PURPR(ProID,ProName,EmpName,KindName,TypeName,ProCol,ProMat,ProAreaName,CarryName,ProP,ProP1,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15) values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox18.Text + "','" + ComboBox1.Text + "','" + ComboBox2.Text + "','" + ComboBox3.Text + "','" + ComboBox4.Text + "','" + ComboBox5.Text + "','" + ComboBox6.Text + "',@bytes,@Bt,'" + TextBox4.Text + "','" + TextBox7.Text + "','" + TextBox8.Text + "','" + TextBox5.Text + "','" + TextBox9.Text + "','" + TextBox10.Text + "','" + TextBox6.Text + "','" + TextBox11.Text + "','" + TextBox3.Text + "','" + TextBox12.Text + "','" + TextBox13.Text + "','" + TextBox15.Text + "','" + TextBox14.Text + "','" + TextBox16.Text + "','" + TextBox17.Text + "')"
            Dim command, cm, cn As New SqlClient.SqlCommand(SQL, conn)
            command.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            cm.Parameters.Add("@Bt", SqlDbType.Binary).Value = Bt
            cn.Parameters.Add("@B", SqlDbType.Binary).Value = B
            command.ExecuteNonQuery()

    2009年11月19日 上午 03:27
  • Insert語了少了@B?把您最後三行改成和在下一致,SqlCommand使用一個就好,另兩個就不要用了...
    2009年11月19日 上午 03:46
  •         command.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            cm.Parameters.Add("@Bt", SqlDbType.Binary, 25480).Value = Bt
            cn.Parameters.Add("@B", SqlDbType.Binary, 25480).Value = B


            command.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            command.Parameters.Add("@Bt", SqlDbType.Binary, 25480).Value = Bt
            command.Parameters.Add("@B", SqlDbType.Binary, 25480).Value = B
    2009年11月19日 上午 04:02
  • 1. 你變數很亂,自己都不會看不懂嗎?"cm" 和 "cn" 是不同的 Command,Parameter 屬於各自的物件。
    2. 要就全用 Parameter,否則一樣會被 SQL Injection。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    若不想快點得到解答,可以儘量把問題寫模糊一點,愈模糊愈不會得到解答。
    除非不能打中文,否則請尊重當地語系的網友,使用中文發問或回答,這是一種基本禮貌。
    2009年11月19日 上午 04:19
    版主
  •  親愛的Joe大大 我依照您的方式改寫 但是3個Picturebox存到SQL各自不同的欄位上都是同一張圖,請問有沒有辦法各自放在各自的欄位內?如果將2和3的 Command改為cm.Parameters.Add("@bt", SqlDbType.Binary).Value = Bt
            cn.Parameters.Add("@b", SqlDbType.Binary).Value = B 又會出現純量變數未宣告。請您費心一下幫我改寫一下



            Dim Stream, Str, St As New IO.MemoryStream
            PB1.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Jpeg)
            Stream.Flush()
            Dim Bytes As Byte() = Stream.ToArray

            PB2.Image.Save(Str, System.Drawing.Imaging.ImageFormat.Jpeg)
            Str.Flush()
            Dim Bt As Byte() = Str.ToArray

            PB3.Image.Save(St, System.Drawing.Imaging.ImageFormat.Jpeg)
            St.Flush()
            Dim B As Byte() = St.ToArray

            Dim SQL As String = "insert into PURPR(ProID,ProName,EmpName,KindName,TypeName,ProCol,ProMat,ProAreaName,CarryName,ProP,ProP1,ProP2,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15) values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox18.Text + "','" + ComboBox1.Text + "','" + ComboBox2.Text + "','" + ComboBox3.Text + "','" + ComboBox4.Text + "','" + ComboBox5.Text + "','" + ComboBox6.Text + "',@bytes,'" + TextBox4.Text + "','" + TextBox7.Text + "','" + TextBox8.Text + "','" + TextBox5.Text + "','" + TextBox9.Text + "','" + TextBox10.Text + "','" + TextBox6.Text + "','" + TextBox11.Text + "','" + TextBox3.Text + "','" + TextBox12.Text + "','" + TextBox13.Text + "','" + TextBox15.Text + "','" + TextBox14.Text + "','" + TextBox16.Text + "','" + TextBox17.Text + "')"
            Dim command, cm, cn As New SqlClient.SqlCommand(SQL, conn)
            command.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes
            command.Parameters.Add("@bt", SqlDbType.Binary).Value = Bt
            command.Parameters.Add("@b", SqlDbType.Binary).Value = B
            command.ExecuteNonQuery()

    2009年11月19日 上午 04:32

  • (1)
    Dim command, cm, cn As New SqlClient.SqlCommand(SQL, conn)
    先釐清這一點, 為什麼你要宣告三個 SqlCommand執行個體  ? 如果你只有執行  command.ExecuteNonQuery() , 那表示cm和cn用不到, 宣告這幹嘛呢 ? 有特別目的嗎 ?

    (2)你宣告了三個純量變數, 可是SQL string看起來卻只用了一個@bytes ?

    Dim SQL As String = "insert into PURPR(ProID,ProName,EmpName,KindName,TypeName,ProCol,ProMat,ProAreaName,CarryName,ProP,ProP1,ProP2,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15) values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox18.Text + "','" + ComboBox1.Text + "','" + ComboBox2.Text + "','" + ComboBox3.Text + "','" + ComboBox4.Text + "','" + ComboBox5.Text + "','" + ComboBox6.Text + "',@bytes ,'" + TextBox4.Text + "','" + TextBox7.Text + "','" + TextBox8.Text + "','" + TextBox5.Text + "','" + TextBox9.Text + "','" + TextBox10.Text + "','" + TextBox6.Text + "','" + TextBox11.Text + "','" + TextBox3.Text + "','" + TextBox12.Text + "','" + TextBox13.Text + "','" + TextBox15.Text + "','" + TextBox14.Text + "','" + TextBox16.Text + "','" + TextBox17.Text + "')"

    (3)朱大提醒了你一件重要的事, 要就全用參數化, 除了安全考量, 在閱讀上也比較容易

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年11月19日 上午 04:58
    版主
  • Dim SQL As String = "insert into PURPR(ProID,ProName,EmpName,KindName,TypeName,ProCol,ProMat,ProAreaName,CarryName,ProP,ProP1,ProP2,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15) values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox18.Text + "','" + ComboBox1.Text + "','" + ComboBox2.Text + "','" + ComboBox3.Text + "','" + ComboBox4.Text + "','" + ComboBox5.Text + "','" + ComboBox6.Text + "',@bytes,@bt,@b,'" + TextBox4.Text + "','" + TextBox7.Text + "','" + TextBox8.Text + "','" + TextBox5.Text + "','" + TextBox9.Text + "','" + TextBox10.Text + "','" + TextBox6.Text + "','" + TextBox11.Text + "','" + TextBox3.Text + "','" + TextBox12.Text + "','" + TextBox13.Text + "','" + TextBox15.Text + "','" + TextBox14.Text + "','" + TextBox16.Text + "','" + TextBox17.Text + "')"
    

    欄位是ProP, ProP1, ProP2嗎?您漏了@bt,@b,前面就有寫了啊...

    2009年11月19日 上午 05:05
  •    各位大大本人才殊學淺表答的不太好 請各位原諒  請板主別見怪  我已經將程式減化如下  請各位大大不吝指教
        1.    Dim Stream, Str, St As New IO.MemoryStream
        2.    PB1.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Jpeg)   '2到4將Picturebox1
                                                                                                                         的檔換為二進位方
                                                                                                                         式存在第15行
        3.    Stream.Flush()
        4.    Dim Bytes As Byte() = Stream.ToArray

        5.    PB2.Image.Save(Str, System.Drawing.Imaging.ImageFormat.Jpeg)    '5到6 是將Picturebox2
                                                                                                                    的圖檔換為二進位方式
                                                                                                                     式存在第16行
        6.    Str.Flush()
        7.    Dim Bt As Byte() = Str.ToArray

        8.    PB3.Image.Save(St, System.Drawing.Imaging.ImageFormat.Jpeg)     '8到行9 是將Picturebox3
                                                                                                                    的圖檔轉換為二進位
                                                                                                                    方式存在第17行
        9.    St.Flush()
        10.   Dim B As Byte() = St.ToArray

        11. Dim SQL As String = "insert into PURPR(ProP,ProP1,ProP2) values (@bytes,@bt,@b)"
        12  Dim command As New SqlClient.SqlCommand(SQL, conn)                   ' 12到14本為一行
                                                                                                                     為了清楚把它分開
        13  Dim cm As New SqlClient.SqlCommand(SQL, conn)
        14  Dim cn As New SqlClient.SqlCommand(SQL, conn)
        15  command.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes '這個是要放Picturebox1
                                                                                                                     的圖檔 對應到Sql的
                                                                                                                     欄位為 ProP (單張圖檔這個沒
                                                                                                                      問題)

        16  cm.Parameters.Add("@bt", SqlDbType.Binary).Value = Bt                     '這個要放Picturebox2 轉換後
                                                                                                                     的二進位圖檔對
                                                                                                                     應 Sql的欄位為 ProP1 (出現
                                                                                                                     宣告純量變數)
        17  cn.Parameters.Add("@b", SqlDbType.Binary).Value = B                       '這個要放Picturebox3 轉換後
                                                                                                                    的二進位圖檔對應到Sql的
                                                                                                                    欄位為 ProP2 (出現未宣告
                                                                                                                    純量變數)
        18  command.ExecuteNonQuery()

    請問如何將這三張不同圖存到不同欄位  再次感謝

    2009年11月19日 上午 06:11
  •     Dim SQL As String = "insert into PURPR(ProP,ProP1,ProP2) values (@bytes,@bt,@b)"
        Dim command As New SqlClient.SqlCommand(SQL, conn)                   ' 12到14本為一行 為了清楚把它分開
        command.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes '這個是要放Picturebox1的圖檔 對應到Sql的
                                                                                                                     欄位為 ProP (單張圖檔這個沒問題)
        command.Parameters.Add("@bt", SqlDbType.Binary).Value = Bt                     '這個要放Picturebox2 轉換後的二進位圖檔對
                                                                                                                     應 Sql的欄位為 ProP1 (出現未宣告純量變數)
        command.Parameters.Add("@b", SqlDbType.Binary).Value = B                       '這個要放Picturebox3 轉換後的二進位圖檔 對
                                                                                                                    應到Sql的欄位為 ProP2 (出現未宣告純量變數)
        command.ExecuteNonQuery()

    2009年11月19日 上午 06:21
  • 親愛的Joy大大 我剛照你所說的改還是轉換同一張圖,二三兩張圖似乎沒有動到,有誰知道怎麼改啊    謝謝您
    Dim SQL As String = "insert into PURPR(ProP,ProP1,ProP2) values (@bytes,@bt,@b)"
    Dim command As New SqlClient.SqlCommand(SQL, conn)                   ' 12到14本為一行 為了清楚把它分開
    command.Parameters.Add("@bytes", SqlDbType.Binary).Value = Bytes '這個是要放Picturebox1的圖檔 對應到Sql的
                                                                                                                     欄位為 ProP (單張圖檔這個沒問題)
    command.Parameters.Add("@bt", SqlDbType.Binary).Value = Bt                     '這個要放Picturebox2 轉換後的二進位圖檔對
                                                                                                                     應 Sql的欄位為 ProP1 (出現未宣告純量變數)
    command.Parameters.Add("@b", SqlDbType.Binary).Value = B                       '這個要放Picturebox3 轉換後的二進位圖檔 對
                                                                                                                    應到Sql的欄位為 ProP2 (出現未宣告純量變數)
    command.ExecuteNonQuery()
    2009年11月19日 上午 06:56
  • 您怎麼知道是同一張圖?您是怎麼到資料庫把圖讀回來?該不會是您讀回來有問題呢...
    2009年11月19日 上午 07:10
  • 親愛的Joe大大  請幫我看一下讀回來的程式是否有問題?好釐清問題的所在 感謝您  以下為讀出的程式碼。再次感謝您

     Dim Bytes As Byte() = yy.Rows(0).Item("ProP")
            Dim mStream As New IO.MemoryStream
            mStream.Write(Bytes, 0, Bytes.Length)
            Dim Img As New Bitmap(mStream)
            PictureBox1.Image = Img
            PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
            mStream.Flush()

            Dim Bytes1 As Byte() = yy.Rows(0).Item("ProP1")
            Dim mStream1 As New IO.MemoryStream
            mStream1.Write(Bytes1, 0, Bytes.Length)
            Dim Img1 As New Bitmap(mStream)
            PictureBox2.Image = Img1
            PictureBox2.SizeMode = PictureBoxSizeMode.StretchImage
            mStream1.Flush()

            Dim Bytes2 As Byte() = yy.Rows(0).Item("ProP2")
            Dim mStream2 As New IO.MemoryStream
            mStream2.Write(Bytes, 0, Bytes.Length)
            Dim Img2 As New Bitmap(mStream)
            PictureBox3.Image = Img2
            PictureBox3.SizeMode = PictureBoxSizeMode.StretchImage
            mStream2.Flush()

    2009年11月19日 上午 08:52
  • mStream1.Write(Bytes1, 0, Bytes1.Length)
    Dim Img1 As New Bitmap(mStream1)
    
    mStream2.Write(Bytes2, 0, Bytes2.Length)
    Dim Img2 As New Bitmap(mStream2)

    應該是這四列的問題,MemoryStream都弄成第一張圖了...




    • 已標示為解答 MichaelTsai10 2009年11月19日 上午 09:43
    2009年11月19日 上午 09:04