作者lbeeon (力比恩)
看板Visual_Basic
標題Re: [.NET] 關於VB.net寫入資料庫mdf或MSSQL問題
時間Mon Aug 13 03:38:18 2012
我最近也在弄類似東西 給你參考一下
基本上就是理用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
1F:推 mmx5mmx5:感謝回答 我會參考看看 08/13 04:45
2F:推 mmx5mmx5:請問有方法可以宣告陣列為new sqlparameter嗎? 08/18 23:31
3F:→ mmx5mmx5:因為會有null的問題 08/18 23:31
4F:→ lbeeon:Dim pmtdata() As sqlparameter 08/22 11:17
5F:→ lbeeon:在用for each new 不知道是不是你要的東西 08/22 11:17
6F:推 mmx5mmx5:感覺起來應該是 我再查查資料 有問題在上來請教 08/22 22:32
7F:→ mmx5mmx5:非常感謝 08/22 22:32
8F:推 mmx5mmx5:對不起 我試了很久 還是不知道for each new要怎麼使用 08/24 23:57
9F:→ 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)
10F:推 mmx5mmx5:還是先謝謝你 我回來再試試 08/25 09:20
11F:→ mmx5mmx5:非常感謝 08/25 09:20
12F:推 mmx5mmx5:非常感謝 關於前面NEW的部分 已經成功了 但是現在的問題 08/26 03:23
13F:→ mmx5mmx5:是這樣的話 會有兩個sqlcmd.CommandText 一個是strSQL1 08/26 03:24
14F:→ mmx5mmx5:另一個是我們所設立陣列 如data(10) 請問還是一樣寫一個 08/26 03:25
15F:→ mmx5mmx5:迴圈來sqlcmd.Parameters.Add嗎? 目前遇到的問題是 會卡 08/26 03:26
16F:→ mmx5mmx5:在sqlcmd.ExecuteNonQuery() 這個地方 08/26 03:27
17F:→ mmx5mmx5:而錯誤是 ExecuteNonQuery: CommandText 屬性尚未初始化 08/26 03:29
18F:→ mmx5mmx5:我有試過 另外設立一個sqlcmd2 但是也是卡在 08/26 03:29
19F:→ 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)
20F:推 mmx5mmx5:strconn那個我有加上去 應該可以連線成功沒問題 08/26 03:52
21F:→ mmx5mmx5:sqlcmd.CommandText = strSQL 就是很大的問題了 因為有兩 08/26 03:53
22F:→ mmx5mmx5:個 所以我不知道要怎麼去設立 08/26 03:53
23F:→ mmx5mmx5:我目前一個是 strSQL1 另一個是 strSQL(x) 08/26 03:54
24F:→ lbeeon:給個程式碼吧 08/26 15:32
26F:→ mmx5mmx5:問題在那個地方 有些註解是我嘗試sqlcmd2的時候所打的 08/26 19:12
27F:→ 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)
28F:推 mmx5mmx5:已收到 我在研究看看 謝謝你 有問題我在上來詢問 08/30 20:02
29F:推 mmx5mmx5:我試了很久 還是不太行 可以麻煩舉例給我看嗎? 08/31 23:00
30F:推 mmx5mmx5:我改成這樣還是不行 08/31 23:02
31F:→ mmx5mmx5:While p < testumber 08/31 23:03
32F:→ mmx5mmx5: sqlcmd.CommandText = strSQL(p) 08/31 23:03
33F:→ mmx5mmx5: sqlcmd.Parameters.Add(test(p)) 08/31 23:03
34F:→ mmx5mmx5: If sqlcmd.ExecuteNonQuery() > 0 Then 08/31 23:04
35F:→ mmx5mmx5: MsgBox("OK") 08/31 23:04
36F:→ mmx5mmx5:Else 08/31 23:04
37F:→ mmx5mmx5: MsgBox("Fail") 08/31 23:04
38F:→ mmx5mmx5: End If 08/31 23:05
39F:→ mmx5mmx5: p = p + 1 08/31 23:05
40F:→ mmx5mmx5: End While 08/31 23:05
41F:→ mmx5mmx5:因為沒有順序的問題 所以我把sqlcmd.CommandText=strSQL1 08/31 23:06
42F:→ mmx5mmx5:只要可以執行成功就好 所以我把上面個移到後面去了 08/31 23:07
43F:→ mmx5mmx5:我不太了解 所謂的ExecuteNonQuery的意思是像上面一樣的 08/31 23:08
44F:→ 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)
45F:推 mmx5mmx5:錯誤還是ExecuteNonQuery:CommandText屬性尚未初始化 09/01 01:51
46F:推 mmx5mmx5:其他的話我再試試看 非常謝謝你的幫忙 因為有一維陣列要 09/01 01:53
47F:→ mmx5mmx5:輸入的關係 所以才會這麼複雜 09/01 01:53
48F:→ mmx5mmx5:我有在思考是不是該換個寫法 09/01 01:53
49F:→ mmx5mmx5:要輸入筆數不確定的數據 09/01 01:55
50F:→ mmx5mmx5:我目前想的到的只有inputbox 09/01 01:55
51F:→ mmx5mmx5:其他真的就不知道了 09/01 01:55
52F:→ lbeeon:我懷疑你的strSQL(p)是不是真的有東西, 09/01 03:06
53F:→ lbeeon:我會這樣寫 sqlcmd.CommandText = strSQL(p).ToString 09/01 03:07
54F:→ 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)
55F:推 mmx5mmx5:INSERT INTO Table3 (數據1) VALUES (@test_n(0)) 09/02 00:21
56F:→ mmx5mmx5:INSERT INTO Table3 (數據2) VALUES (@test_n(1)) 09/02 00:21
57F:→ mmx5mmx5:看起來好像是對的 可是還是行不通 我輸入testumber=2 09/02 00:22
58F:→ mmx5mmx5:不過錯誤的地方變了 是SqlException未處理 09/02 00:24
59F:→ mmx5mmx5:接近 '(' 之處的語法不正確。 09/02 00:24
60F:→ mmx5mmx5:必須宣告純量變數 "@test_n"。 09/02 00:25
61F:→ lbeeon:這錯誤表示你的sqlparameters 沒放進去 所以錯誤 09/02 01:03
62F:→ lbeeon:其實你的parameter可以都放一樣的 只是你再執行前 09/02 01:04
63F:→ lbeeon:再將Parameter.value改掉就好這樣你insert內的參數就不用 09/02 01:05
64F:→ lbeeon:一直換 09/02 01:05
65F:→ lbeeon:在一個建議將你的SQL語法放在SQL Server 測試看看 09/02 01:07
66F:→ lbeeon:如果輸入的東西Insert後面的都很類似 我會寫個Sub 這樣call 09/02 01:09
67F:→ lbeeon:比較方便 不過效能就不確定了... 09/02 01:09
68F:推 mmx5mmx5:已收到 所以目前來說好像陣列要寫入SQL好像這個方法行不 09/02 01:44
69F:→ mmx5mmx5:通的樣子 我再查查看有沒有別的方法吧 在這個暑假之前我 09/02 01:44
70F:→ mmx5mmx5:完全不會寫程式 現在也只會用方法才拼湊而已 所以很多基 09/02 01:45
71F:→ mmx5mmx5:本的概念我都沒有 我只能慢慢的去TRY而已 真的非常感謝你 09/02 01:46
72F:→ mmx5mmx5:的幫助 真的非常謝謝 我會再想想辦法的 09/02 01:46
73F:→ mmx5mmx5:再次感謝 感激不盡!!! 09/02 01:47
74F:→ mmx5mmx5:而你最後打的方法我再試試看 希望可以行的通!! 09/02 01:48
75F:→ lbeeon:VB我也不太會..剛好在作資料庫所以有用到 很高興有幫到你 09/02 02:35