看板 Visual_Basic 關於我們 聯絡資訊
我最近也在弄類似東西 給你參考一下 基本上就是理用SQL 將要輸入的東西參數化 我目前這樣弄感覺頗方便.. Dim conn As SqlConnection Dim sqlcmd As New SqlCommand Dim strconn, strSQL As String strconn = "Server=(local);database=;User=; Password=" strSQL = "INSERT INTO Table1 (data1,data2) VALUES (@data1,@data2)" 'SQL參數命名設置 Dim pmtdata1, pmtdata2 As New sqlParameter pmtdata1.ParameterName = "@data1" pmtdate1.Value = oTextbox.text pmtdata2.ParameterName = "@data2" pmtdata2.Value = oDropdownlist.selectedvalue conn = New SqlConnection(strconn) conn.Open() sqlcmd.Connection = conn sqlcmd.CommandText = strSQL sqlcmd.Parameters.Add(pmtdata1) sqlcmd.Parameters.Add(pmtdata2) If sqlcmd.ExecuteNonQuery() > 0 then Msgbox("OK") Else MsgBox("Fail") End if ※ 引述《mmx5mmx5 (=新竹貢丸=)》之銘言: : 承上篇文章 : 我已經寫出用TEXTBOX與INPUTBOX來輸入資料 : 然後利用 table.Columns.Add 和 table.Rows.Add 來建立Table : 最後使用 DataGridView1.DataSource = table 來顯示 : 已經可以顯示出我想顯示出來Table了 : 接下來需要 上傳 到資料庫 (MSSQLSERVER2008) : 我有查到很多的範例 : 大部分都是類似這樣的範例 : Dim conndbstr As String : conndbstr = "data Source=.\MSSQLSERVER;initial catalog = company;" : + "user id = sa;password=12345" : Dim conn As SqlConnection = New SqlConnection(conndbstr) : conn.Open() : 或者是連到mdf的 : Dim conndb = New SqlConnection : Conndb.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dbtest.mdf;Integrated : Security=True;User Instance=True;" : Conndb.Open() : 然後之後再insert into 到資料庫裡面 : 我想問的是 : 因為我在資料庫裡面有建立Table : 要怎麼樣才能把資料輸入到我想要的欄位裡面 : 或者是 怎樣才能 上傳資料到資料庫裡面 : 就算偵測沒有錯誤 : 我按了按鈕以後 他還是無法寫入資料庫裡面 : 這是我最大的疑問 : 請問要怎麼寫才能寫入資料庫裡面 : 希望有人可以回答我的問題 : 感謝您看完這篇文章 : 非常感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.209.136.209
mmx5mmx5:感謝回答 我會參考看看 08/13 04:45
mmx5mmx5:請問有方法可以宣告陣列為new sqlparameter嗎? 08/18 23:31
mmx5mmx5:因為會有null的問題 08/18 23:31
lbeeon:Dim pmtdata() As sqlparameter 08/22 11:17
lbeeon:在用for each new 不知道是不是你要的東西 08/22 11:17
mmx5mmx5:感覺起來應該是 我再查查資料 有問題在上來請教 08/22 22:32
mmx5mmx5:非常感謝 08/22 22:32
mmx5mmx5:對不起 我試了很久 還是不知道for each new要怎麼使用 08/24 23:57
mmx5mmx5:可以再次請教嗎? 08/24 23:57
我有點誤導 應該用for 就好了 .net其實我不太確定宣告陣列後是否要建構子(new) 之前學OO的時候是用JAVA,再使用前都要new(相當於取的記憶體位置) 才不會產生錯誤 不過.net也是OO一種應該是對的,下面程式碼你在參考一下 Dim data(10) As SqlParameter Dim i As Integer = 0 For i = 0 To data.Length - 1 Step 1 data(i) = New SqlParameter data(i).Value = i.ToString Next ※ 編輯: lbeeon 來自: 1.170.0.40 (08/25 03:05)
mmx5mmx5:還是先謝謝你 我回來再試試 08/25 09:20
mmx5mmx5:非常感謝 08/25 09:20
mmx5mmx5:非常感謝 關於前面NEW的部分 已經成功了 但是現在的問題 08/26 03:23
mmx5mmx5:是這樣的話 會有兩個sqlcmd.CommandText 一個是strSQL1 08/26 03:24
mmx5mmx5:另一個是我們所設立陣列 如data(10) 請問還是一樣寫一個 08/26 03:25
mmx5mmx5:迴圈來sqlcmd.Parameters.Add嗎? 目前遇到的問題是 會卡 08/26 03:26
mmx5mmx5:在sqlcmd.ExecuteNonQuery() 這個地方 08/26 03:27
mmx5mmx5:而錯誤是 ExecuteNonQuery: CommandText 屬性尚未初始化 08/26 03:29
mmx5mmx5:我有試過 另外設立一個sqlcmd2 但是也是卡在 08/26 03:29
mmx5mmx5: sqlcmd.ExecuteNonQuery()這個地方 08/26 03:30
strconn = "Server=(local);database=____;User=____; Password=____" sqlcmd.CommandText = strSQL 類似這兩行撿查一下,底線部分要補上去。 ※ 編輯: lbeeon 來自: 1.170.0.40 (08/26 03:44)
mmx5mmx5:strconn那個我有加上去 應該可以連線成功沒問題 08/26 03:52
mmx5mmx5:sqlcmd.CommandText = strSQL 就是很大的問題了 因為有兩 08/26 03:53
mmx5mmx5:個 所以我不知道要怎麼去設立 08/26 03:53
mmx5mmx5:我目前一個是 strSQL1 另一個是 strSQL(x) 08/26 03:54
lbeeon:給個程式碼吧 08/26 15:32
mmx5mmx5:http://ppt.cc/_bsz 可以從BUTTON2CLICK的程式碼開始看 08/26 19:11
mmx5mmx5:問題在那個地方 有些註解是我嘗試sqlcmd2的時候所打的 08/26 19:12
mmx5mmx5:麻煩你了 真的非常打擾 非常感謝你 08/26 19:13
最近較忙沒回應 大概看了一下,你應該是想要利用迴圈控制某特定欄位的輸入輸出, 不過沒很聊解你想控制的東西,但是一搬來說如果我有兩個strSQL 如果有順序執行完成(Transaction 觀念),一個交易結束再執行另一 個的話,我會ExecuteNonQuery後再將sqlcmd.CommandText替換成strSQL2 這樣來說是可行的,如果兩個要同時存在的話,那你就必須再新增一個 sqlcmd2來使用,如果你有Transaction觀念的話,基本上 sqlcmd.ExecuteNonQuery後,前一個strSQL就已經執行結束(committed), 所以直接替換CommandText後在Execute是可行的。 你在思考看看。 ※ 編輯: lbeeon 來自: 122.118.26.20 (08/29 22:46)
mmx5mmx5:已收到 我在研究看看 謝謝你 有問題我在上來詢問 08/30 20:02
mmx5mmx5:我試了很久 還是不太行 可以麻煩舉例給我看嗎? 08/31 23:00
mmx5mmx5:我改成這樣還是不行 08/31 23:02
mmx5mmx5:While p < testumber 08/31 23:03
mmx5mmx5: sqlcmd.CommandText = strSQL(p) 08/31 23:03
mmx5mmx5: sqlcmd.Parameters.Add(test(p)) 08/31 23:03
mmx5mmx5: If sqlcmd.ExecuteNonQuery() > 0 Then 08/31 23:04
mmx5mmx5: MsgBox("OK") 08/31 23:04
mmx5mmx5:Else 08/31 23:04
mmx5mmx5: MsgBox("Fail") 08/31 23:04
mmx5mmx5: End If 08/31 23:05
mmx5mmx5: p = p + 1 08/31 23:05
mmx5mmx5: End While 08/31 23:05
mmx5mmx5:因為沒有順序的問題 所以我把sqlcmd.CommandText=strSQL1 08/31 23:06
mmx5mmx5:只要可以執行成功就好 所以我把上面個移到後面去了 08/31 23:07
mmx5mmx5:我不太了解 所謂的ExecuteNonQuery的意思是像上面一樣的 08/31 23:08
mmx5mmx5:sqlcmd.ExecuteNonQuery() > 0 先打這個的意思嗎? 08/31 23:08
ExecuteNonQuery回傳值的意思是,執行該SQL所影響的資料筆數, 故常回利用 ExecuteNonQuery 回傳值是否有大於零來確認執行成功於否, 也因為前面提過Transaction的觀念,SQL的執行只有1或0,沒有執行幾行的 程式碼的,所以利用ExecuteNonQuery來作為判斷,對於資料庫的新增、刪除 、更新都能有效掌握。至於你說的不行有點太籠統,是語法問題還是... 貼個錯誤資訊可能比較好解決,希望有幫到你。 ※ 編輯: lbeeon 來自: 114.38.3.102 (09/01 01:04)
mmx5mmx5:錯誤還是ExecuteNonQuery:CommandText屬性尚未初始化 09/01 01:51
mmx5mmx5:其他的話我再試試看 非常謝謝你的幫忙 因為有一維陣列要 09/01 01:53
mmx5mmx5:輸入的關係 所以才會這麼複雜 09/01 01:53
mmx5mmx5:我有在思考是不是該換個寫法 09/01 01:53
mmx5mmx5:要輸入筆數不確定的數據 09/01 01:55
mmx5mmx5:我目前想的到的只有inputbox 09/01 01:55
mmx5mmx5:其他真的就不知道了 09/01 01:55
lbeeon:我懷疑你的strSQL(p)是不是真的有東西, 09/01 03:06
lbeeon:我會這樣寫 sqlcmd.CommandText = strSQL(p).ToString 09/01 03:07
lbeeon:確保assign CommandText的時候是字串 09/01 03:08
直接看有沒有東西吧,這樣最快。 While p < testumber 'sqlcmd.CommandText = strSQL(p) 'sqlcmd.Parameters.Add(test(p)) 'If sqlcmd.ExecuteNonQuery() > 0 Then 'MsgBox("OK") 'Else 'MsgBox("Fail") 'End If MsgBox(strSQL(p).ToString) '先確認strSQL重的SQL是不是你想要的 '能用在註解掉 p = p + 1 End While ※ 編輯: lbeeon 來自: 114.38.3.102 (09/01 03:14) ※ 編輯: lbeeon 來自: 114.38.3.102 (09/01 03:20)
mmx5mmx5:INSERT INTO Table3 (數據1) VALUES (@test_n(0)) 09/02 00:21
mmx5mmx5:INSERT INTO Table3 (數據2) VALUES (@test_n(1)) 09/02 00:21
mmx5mmx5:看起來好像是對的 可是還是行不通 我輸入testumber=2 09/02 00:22
mmx5mmx5:不過錯誤的地方變了 是SqlException未處理 09/02 00:24
mmx5mmx5:接近 '(' 之處的語法不正確。 09/02 00:24
mmx5mmx5:必須宣告純量變數 "@test_n"。 09/02 00:25
lbeeon:這錯誤表示你的sqlparameters 沒放進去 所以錯誤 09/02 01:03
lbeeon:其實你的parameter可以都放一樣的 只是你再執行前 09/02 01:04
lbeeon:再將Parameter.value改掉就好這樣你insert內的參數就不用 09/02 01:05
lbeeon:一直換 09/02 01:05
lbeeon:在一個建議將你的SQL語法放在SQL Server 測試看看 09/02 01:07
lbeeon:如果輸入的東西Insert後面的都很類似 我會寫個Sub 這樣call 09/02 01:09
lbeeon:比較方便 不過效能就不確定了... 09/02 01:09
mmx5mmx5:已收到 所以目前來說好像陣列要寫入SQL好像這個方法行不 09/02 01:44
mmx5mmx5:通的樣子 我再查查看有沒有別的方法吧 在這個暑假之前我 09/02 01:44
mmx5mmx5:完全不會寫程式 現在也只會用方法才拼湊而已 所以很多基 09/02 01:45
mmx5mmx5:本的概念我都沒有 我只能慢慢的去TRY而已 真的非常感謝你 09/02 01:46
mmx5mmx5:的幫助 真的非常謝謝 我會再想想辦法的 09/02 01:46
mmx5mmx5:再次感謝 感激不盡!!! 09/02 01:47
mmx5mmx5:而你最後打的方法我再試試看 希望可以行的通!! 09/02 01:48
lbeeon:VB我也不太會..剛好在作資料庫所以有用到 很高興有幫到你 09/02 02:35