作者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