Re: [.NET] 關於VB.net寫入資料庫mdf或MSSQL問題

看板Visual_Basic作者 (力比恩)時間12年前 (2012/08/13 03:38), 編輯推噓15(15060)
留言75則, 2人參與, 最新討論串3/3 (看更多)
我最近也在弄類似東西 給你參考一下 基本上就是理用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

08/13 04:45, , 1F
感謝回答 我會參考看看
08/13 04:45, 1F

08/18 23:31, , 2F
請問有方法可以宣告陣列為new sqlparameter嗎?
08/18 23:31, 2F

08/18 23:31, , 3F
因為會有null的問題
08/18 23:31, 3F

08/22 11:17, , 4F
Dim pmtdata() As sqlparameter
08/22 11:17, 4F

08/22 11:17, , 5F
在用for each new 不知道是不是你要的東西
08/22 11:17, 5F

08/22 22:32, , 6F
感覺起來應該是 我再查查資料 有問題在上來請教
08/22 22:32, 6F

08/22 22:32, , 7F
非常感謝
08/22 22:32, 7F

08/24 23:57, , 8F
對不起 我試了很久 還是不知道for each new要怎麼使用
08/24 23:57, 8F

08/24 23:57, , 9F
可以再次請教嗎?
08/24 23:57, 9F
我有點誤導 應該用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)

08/25 09:20, , 10F
還是先謝謝你 我回來再試試
08/25 09:20, 10F

08/25 09:20, , 11F
非常感謝
08/25 09:20, 11F

08/26 03:23, , 12F
非常感謝 關於前面NEW的部分 已經成功了 但是現在的問題
08/26 03:23, 12F

08/26 03:24, , 13F
是這樣的話 會有兩個sqlcmd.CommandText 一個是strSQL1
08/26 03:24, 13F

08/26 03:25, , 14F
另一個是我們所設立陣列 如data(10) 請問還是一樣寫一個
08/26 03:25, 14F

08/26 03:26, , 15F
迴圈來sqlcmd.Parameters.Add嗎? 目前遇到的問題是 會卡
08/26 03:26, 15F

08/26 03:27, , 16F
在sqlcmd.ExecuteNonQuery() 這個地方
08/26 03:27, 16F

08/26 03:29, , 17F
而錯誤是 ExecuteNonQuery: CommandText 屬性尚未初始化
08/26 03:29, 17F

08/26 03:29, , 18F
我有試過 另外設立一個sqlcmd2 但是也是卡在
08/26 03:29, 18F

08/26 03:30, , 19F
sqlcmd.ExecuteNonQuery()這個地方
08/26 03:30, 19F
strconn = "Server=(local);database=____;User=____; Password=____" sqlcmd.CommandText = strSQL 類似這兩行撿查一下,底線部分要補上去。 ※ 編輯: lbeeon 來自: 1.170.0.40 (08/26 03:44)

08/26 03:52, , 20F
strconn那個我有加上去 應該可以連線成功沒問題
08/26 03:52, 20F

08/26 03:53, , 21F
sqlcmd.CommandText = strSQL 就是很大的問題了 因為有兩
08/26 03:53, 21F

08/26 03:53, , 22F
個 所以我不知道要怎麼去設立
08/26 03:53, 22F

08/26 03:54, , 23F
我目前一個是 strSQL1 另一個是 strSQL(x)
08/26 03:54, 23F

08/26 15:32, , 24F
給個程式碼吧
08/26 15:32, 24F

08/26 19:11, , 25F
http://ppt.cc/_bsz 可以從BUTTON2CLICK的程式碼開始看
08/26 19:11, 25F

08/26 19:12, , 26F
問題在那個地方 有些註解是我嘗試sqlcmd2的時候所打的
08/26 19:12, 26F

08/26 19:13, , 27F
麻煩你了 真的非常打擾 非常感謝你
08/26 19:13, 27F
最近較忙沒回應 大概看了一下,你應該是想要利用迴圈控制某特定欄位的輸入輸出, 不過沒很聊解你想控制的東西,但是一搬來說如果我有兩個strSQL 如果有順序執行完成(Transaction 觀念),一個交易結束再執行另一 個的話,我會ExecuteNonQuery後再將sqlcmd.CommandText替換成strSQL2 這樣來說是可行的,如果兩個要同時存在的話,那你就必須再新增一個 sqlcmd2來使用,如果你有Transaction觀念的話,基本上 sqlcmd.ExecuteNonQuery後,前一個strSQL就已經執行結束(committed), 所以直接替換CommandText後在Execute是可行的。 你在思考看看。 ※ 編輯: lbeeon 來自: 122.118.26.20 (08/29 22:46)

08/30 20:02, , 28F
已收到 我在研究看看 謝謝你 有問題我在上來詢問
08/30 20:02, 28F

08/31 23:00, , 29F
我試了很久 還是不太行 可以麻煩舉例給我看嗎?
08/31 23:00, 29F

08/31 23:02, , 30F
我改成這樣還是不行
08/31 23:02, 30F

08/31 23:03, , 31F
While p < testumber
08/31 23:03, 31F

08/31 23:03, , 32F
sqlcmd.CommandText = strSQL(p)
08/31 23:03, 32F

08/31 23:03, , 33F
sqlcmd.Parameters.Add(test(p))
08/31 23:03, 33F

08/31 23:04, , 34F
If sqlcmd.ExecuteNonQuery() > 0 Then
08/31 23:04, 34F

08/31 23:04, , 35F
MsgBox("OK")
08/31 23:04, 35F

08/31 23:04, , 36F
Else
08/31 23:04, 36F

08/31 23:04, , 37F
MsgBox("Fail")
08/31 23:04, 37F

08/31 23:05, , 38F
End If
08/31 23:05, 38F

08/31 23:05, , 39F
p = p + 1
08/31 23:05, 39F

08/31 23:05, , 40F
End While
08/31 23:05, 40F

08/31 23:06, , 41F
因為沒有順序的問題 所以我把sqlcmd.CommandText=strSQL1
08/31 23:06, 41F

08/31 23:07, , 42F
只要可以執行成功就好 所以我把上面個移到後面去了
08/31 23:07, 42F

08/31 23:08, , 43F
我不太了解 所謂的ExecuteNonQuery的意思是像上面一樣的
08/31 23:08, 43F

08/31 23:08, , 44F
sqlcmd.ExecuteNonQuery() > 0 先打這個的意思嗎?
08/31 23:08, 44F
ExecuteNonQuery回傳值的意思是,執行該SQL所影響的資料筆數, 故常回利用 ExecuteNonQuery 回傳值是否有大於零來確認執行成功於否, 也因為前面提過Transaction的觀念,SQL的執行只有1或0,沒有執行幾行的 程式碼的,所以利用ExecuteNonQuery來作為判斷,對於資料庫的新增、刪除 、更新都能有效掌握。至於你說的不行有點太籠統,是語法問題還是... 貼個錯誤資訊可能比較好解決,希望有幫到你。 ※ 編輯: lbeeon 來自: 114.38.3.102 (09/01 01:04)

09/01 01:51, , 45F
錯誤還是ExecuteNonQuery:CommandText屬性尚未初始化
09/01 01:51, 45F

09/01 01:53, , 46F
其他的話我再試試看 非常謝謝你的幫忙 因為有一維陣列要
09/01 01:53, 46F

09/01 01:53, , 47F
輸入的關係 所以才會這麼複雜
09/01 01:53, 47F

09/01 01:53, , 48F
我有在思考是不是該換個寫法
09/01 01:53, 48F

09/01 01:55, , 49F
要輸入筆數不確定的數據
09/01 01:55, 49F

09/01 01:55, , 50F
我目前想的到的只有inputbox
09/01 01:55, 50F

09/01 01:55, , 51F
其他真的就不知道了
09/01 01:55, 51F

09/01 03:06, , 52F
我懷疑你的strSQL(p)是不是真的有東西,
09/01 03:06, 52F

09/01 03:07, , 53F
我會這樣寫 sqlcmd.CommandText = strSQL(p).ToString
09/01 03:07, 53F

09/01 03:08, , 54F
確保assign CommandText的時候是字串
09/01 03:08, 54F
直接看有沒有東西吧,這樣最快。 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)

09/02 00:21, , 55F
INSERT INTO Table3 (數據1) VALUES (@test_n(0))
09/02 00:21, 55F

09/02 00:21, , 56F
INSERT INTO Table3 (數據2) VALUES (@test_n(1))
09/02 00:21, 56F

09/02 00:22, , 57F
看起來好像是對的 可是還是行不通 我輸入testumber=2
09/02 00:22, 57F

09/02 00:24, , 58F
不過錯誤的地方變了 是SqlException未處理
09/02 00:24, 58F

09/02 00:24, , 59F
接近 '(' 之處的語法不正確。
09/02 00:24, 59F

09/02 00:25, , 60F
必須宣告純量變數 "@test_n"。
09/02 00:25, 60F

09/02 01:03, , 61F
這錯誤表示你的sqlparameters 沒放進去 所以錯誤
09/02 01:03, 61F

09/02 01:04, , 62F
其實你的parameter可以都放一樣的 只是你再執行前
09/02 01:04, 62F

09/02 01:05, , 63F
再將Parameter.value改掉就好這樣你insert內的參數就不用
09/02 01:05, 63F

09/02 01:05, , 64F
一直換
09/02 01:05, 64F

09/02 01:07, , 65F
在一個建議將你的SQL語法放在SQL Server 測試看看
09/02 01:07, 65F

09/02 01:09, , 66F
如果輸入的東西Insert後面的都很類似 我會寫個Sub 這樣call
09/02 01:09, 66F

09/02 01:09, , 67F
比較方便 不過效能就不確定了...
09/02 01:09, 67F

09/02 01:44, , 68F
已收到 所以目前來說好像陣列要寫入SQL好像這個方法行不
09/02 01:44, 68F

09/02 01:44, , 69F
通的樣子 我再查查看有沒有別的方法吧 在這個暑假之前我
09/02 01:44, 69F

09/02 01:45, , 70F
完全不會寫程式 現在也只會用方法才拼湊而已 所以很多基
09/02 01:45, 70F

09/02 01:46, , 71F
本的概念我都沒有 我只能慢慢的去TRY而已 真的非常感謝你
09/02 01:46, 71F

09/02 01:46, , 72F
的幫助 真的非常謝謝 我會再想想辦法的
09/02 01:46, 72F

09/02 01:47, , 73F
再次感謝 感激不盡!!!
09/02 01:47, 73F

09/02 01:48, , 74F
而你最後打的方法我再試試看 希望可以行的通!!
09/02 01:48, 74F

09/02 02:35, , 75F
VB我也不太會..剛好在作資料庫所以有用到 很高興有幫到你
09/02 02:35, 75F
文章代碼(AID): #1GA0Okqi (Visual_Basic)
文章代碼(AID): #1GA0Okqi (Visual_Basic)