注册 登录
编程论坛 VB.NET论坛

这里真的没人能帮我吗,这个问题我已经折腾一个星期了也没解决!

杀虫剂 发布于 2007-12-13 10:49, 3034 次点击
数据就是写不进数据库!!!
也许不是代码问题,但问题可能出在哪里呢?
我在网上也搜了好几天了,没有类似的问题.

请大家帮忙看看这段代码哪里有问题,谢谢!
Shared Function Insert(ByVal ConnectionString As String, ByVal SQLString As String) As Integer
        Dim Connection As SqlConnection = New SqlConnection(ConnectionString)
        Dim Command As SqlCommand = New SqlCommand(SQLString, Connection)
        Dim Transaction As SqlTransaction
        Dim Count As Integer = 0

        Connection.Open()
        Transaction = Connection.BeginTransaction()
        Command.Transaction = Transaction

        Try
            Count = Command.ExecuteNonQuery()
            ()
        Catch ex As SqlException
            MsgBox(ex.ToString())
        Catch ex As Exception
            MsgBox(ex.ToString())
        Finally
            Connection.Close()
        End Try
        Return Count
    End Function

学习VB2005中
调用insert后count的返回值说明数据库操作正常,但就是没有添加进数据.
可我的代码里有commit呀
传进的参数为SQLString = "INSERT INTO Table1(aaa,bbb,ccc) VALUES('a2','b2','c2')"
自己研究好几天了,不知道哪里错了.
谢谢了!!!
22 回复
#2
fairy42007-12-13 14:44
Shared Function Insert(ByVal ConnectionString As String, ByVal SQLString As String) As Integer
        

        Dim connection As New SqlConnection(ConnectionString)
        Dim command As New SqlCommand()
        Dim transaction As SqlTransaction



        Dim Count As Integer = 0
        command.Connection = connection
        connection.Open()
        transaction = connection.BeginTransaction()
        command.Transaction = transaction
         = SQLString

        Try
            Count = command.ExecuteNonQuery()
            ()
        Catch ex As Exception
            MsgBox(ex.ToString())
        Finally
            connection.Close()
        End Try
        Return Count
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim SQLString As String = "INSERT INTO test(aa,bb,cc) VALUES  ('a2','b2','c2')"
        Dim conn As String = "User ID=test;PassWord=1234;Data Source=127.0.0.1  ;DataBase=Test"
        Call Insert(conn, SQLString)
    End Sub
自己去看,你少了什么!!!!

[[italic] 本帖最后由 fairy4 于 2007-12-13 14:45 编辑 [/italic]]
#3
杀虫剂2007-12-13 15:26
不同的地方有这些:
1\ Functiong中的 = SQLString ,我试过了,有没有这句结果是一样的.
2\  button1_click的设置:  1. Call Insert(conn, SQLString)这句有没有结果都一样.
                                             2.连接字符串不同
conn = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\练习.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
      这是从MyProject--->设置里面粘下来的,因为其他的设置会出错.(我不太肯定这么做对不对,这个连接字符串是系统自动生成的)
如果是连接字符串的问题,我应该怎么做呢,如果不是......
      问题还是没有解决
      我知道这是我学习上的一个坎,请帮助一下.谢谢了!
#4
fairy42007-12-13 16:48
只有本站会员才能查看附件,请 登录

我是運行成功,你看圖片!
#5
杀虫剂2007-12-13 16:57
将"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\练习.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"中的Data Source=.\SQLEXPRESS"
改为Data Source=localhost编译时报错.
AttachDbFilename=|DataDirectory|\练习.mdf更改后同样报错.
重新设定SQL server 2005的配置,改成正在运行和自动,还有网络\本地都可以.还是不行.

只要不是系统生成的连接字符串一编译就出错
数据库就是添加不了
高手们快帮帮忙吧!!!!!!!
#6
fairy42007-12-13 17:01
看來你的連接字符串有問題!!!!


Call Insert(conn, SQLString)这句有没有结果都一样.

??不調用這個,你怎么插數據?
#7
fairy42007-12-13 17:04
Dim conn As String = "User ID=test;PassWord=1234;Data Source=127.0.0.1  ;DataBase=Test"
試下這句

User ID:用戶名
PassWord:密碼
Data Source:你自己的IP地址
DataBase:數據庫名
你自己進企業管理器有問題沒???????
#8
杀虫剂2007-12-13 17:10
这样吧,你新建一个工程,添加一个类,把下面的粘过去.
Imports System.Data.SqlClient
Public Class EditDataBase
    Shared Function Insert(ByVal ConnectionString As String, ByVal SQLString As String) As Integer
        Dim Connection As SqlConnection = New SqlConnection(ConnectionString)
        Dim Command As SqlCommand = New SqlCommand(SQLString, Connection)
        Dim Transaction As SqlTransaction
        Dim Count As Integer = 0
        Command.Connection = Connection
        Connection.Open()
        Transaction = Connection.BeginTransaction()
        Command.Transaction = Transaction
        Try
            Count = Command.ExecuteNonQuery()
            ()
        Catch ex As SqlException
            MsgBox(ex.ToString())
        Catch ex As Exception
            MsgBox(ex.ToString())
        Finally
            Connection.Close()
        End Try
        Return Count
    End Function
    Shared Function Delete(ByVal ConnectionString As String, ByVal table As String, ByVal row As String, ByVal value As String) As Integer
        Dim Connection As SqlConnection = New SqlConnection(ConnectionString)
        Dim SQLString As String = "Delete Form" + table + "Where" + row + "=" + "" + value + ""
        Dim Command As SqlCommand = New SqlCommand(SQLString, Connection)
        Dim Count As Integer = 0
        Try
            Connection.Open()
            Count = Command.ExecuteNonQuery()
        Catch ex As SqlException
            MsgBox(ex.ToString())
        Finally
            Connection.Close()
        End Try
        Return Count
    End Function
    Shared Function Update(ByVal ConnectionString As String, ByVal table As String, ByVal StrContent As String, ByVal row As String, ByVal value As String) As Integer
        Dim Connection As SqlConnection = New SqlConnection(ConnectionString)
        Dim SQLString As String = "Update" + table + "Set" + StrContent + "Where" + row + "=" + "" + value + ""
        Dim Command As SqlCommand = New SqlCommand(SQLString, Connection)
        Dim Count As Integer = 0
        Try
            Connection.Open()
            Count = Command.ExecuteNonQuery()
        Catch ex As SqlException
            MsgBox(ex.ToString())
        Finally
            Connection.Close()
        End Try
        Return Count
    End Function
    Shared Function Search(ByVal ConnectionString As String, ByVal SQLString As String) As DataTable
        Dim Connection As SqlConnection = New SqlConnection(ConnectionString)
        Dim Command As SqlCommand = New SqlCommand(SQLString, Connection)

        Connection.Open()

        Dim Adapter As New SqlDataAdapter
        Adapter.TableMappings.Add("Table", "TEMP")
        Adapter.SelectCommand = Command

        Dim ObjectdsDataSet As New DataSet()
        Adapter.Fill(ObjectdsDataSet)

        Connection.Close()
        Return ObjectdsDataSet.Tables("TEMP")

    End Function
End Class
然后添加一个表,加个按钮,加个DataGridView控件
添加一个新数据源,选择microsoft SQL server 数据库文件
随便创建一个表,里面有aaa,bbb,ccc这几个列
把数据库连接好,打开解决方案资源管理器中的My Project,打开设置,找到“值”那列的自动生成的连接字符串
粘贴到“按钮”的连接字符串中。
我的如下:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim connAddStr As String
        connAddStr = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\练习.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
        Dim SQLString = "INSERT INTO table1(aaa,bbb,ccc) VALUES('a1','b1','c1')"
        Dim count As Integer = EditDataBase.Insert(connAddStr, SQLString)
        SQLString = "insert into table1(aaa,bbb,ccc) values('a2','b2','c2')"
        count = count + EditDataBase.Insert(connAddStr, SQLString)
        Call EditDataBase.Insert(connAddStr, SQLString)

        If (count > 0) Then
            MsgBox("")
        End If
    End Sub

我就是这么做的,添加不了呀!
#9
杀虫剂2007-12-13 17:18
我登陆服务器使用的是windows 身份验证,没有用户名和密码。
#10
fairy42007-12-13 18:02
我已經告訴你問題所在,我的程序也能正常執行,其他的....
我不可能幫你去建立一個數據庫!然后幫你去調式代碼,我公司也不會允許我去建立數據庫!
#11
杀虫剂2007-12-14 08:28
不管怎样,先谢谢了!
我自己再想想.
#12
杀虫剂2007-12-14 09:32
我试了试创建SQL账户,显示错误:
"该用户与可信SQL server连接无关联",创建不了.
另外,找不到你说的企业资源管理器,菜单和工具栏都没有这一项,SQL sever manager里也没有。
我再查查看.
#13
fairy42007-12-14 09:43
試下系統元件!
SqlDataAdapter
看你能正確找到數據庫,看到你要的字段不!!!???
系統會提示你怎么操作的,根據這個寫個連接字串就可以了
#14
杀虫剂2007-12-14 10:12
不仅能找到数据库,而且在服务器资源管理器--〉数据连接--〉表--〉table1用右键--〉显示数据表
都可以向数据库中添加数据,这个操作是确实添加到数据库中了,运行后能看得到。但是运行程序时就是添加不了。
另外,我用你贴的代码重新建了个工程,如果数据库用SQL帐号,创建的时候就显示
"该用户与可信SQL server连接无关联",根本创建不了。
如果用windows账户,可以创建,但运行时报错
“System.Data.SqlClient.SQLException:对象名‘test’无效”
用F8逐语句编译,发现
    Try
            Count = command.ExecuteNonQuery()
            ()
        Catch ex As Exception
            MsgBox(ex.ToString())
        Finally
            connection.Close()
        End Try
Try没有执行到,直接进入Catch ex As Exception 行,然后报错。

再有,企业资源管理器我的VS界面没有,SqlDataAdapter也没找到。
#15
杀虫剂2007-12-14 13:36
真没辙了,回头重装系统试试。
#16
fairy42007-12-14 15:36
test是表名,你的數據庫沒這個表
#17
fairy42007-12-14 15:38
企业资源管理器是數據庫管理器
就是你說的 SQL sever manager
SqlDataAdapter 在vs的工具箱的   資料  一欄里面
#18
杀虫剂2007-12-14 16:03
呵呵,重装系统中,刚把VISTA恢复,正在装杀毒软件,一会儿装office2007和visual studio2005.
不过我估计把表名改成test也不行,SQL sever注册不了,没法设定用户名和密码.估计是系统设定有问题.
另外access2007数据库用不了,没有12.0版本的ADO.从网上下了个升级包,运行后没反应,VS2005里也找不到12.0的只能找到4.0的,结果就是access2007的数据库不认.不知道怎么用.
我刚学,麻烦多着呢!呵呵,不过不怕,总会学会的.
还有你们的vs2005安装盘多大的?我的2个多G,不会是不完整的吧,要是这样我就白忙了.还得去下3个多G的那个,又要小一星期.
我原来编过程,DOS下的Basic;C++等等,好多年不用了,不过技巧\算法什么的对我来说问题不大.
现在接触面向对象的,还要适应一段时间.主要是软件的设定,麻烦死了,现在软件太大太复杂.
还有兼容性,我的VISTA开始连VS都装不上,研究了很长时间才知道如何装,不知道这个问题和VISTA的兼容性有没有关.
对我来说真把设定\连接什么的搞定,到编程就轻松了.
不过我感觉我的这个问题初学者很多人都回遇到,也许不那么简单就能搞定的,我基本已经排除了代码错误的因素,因为用书上的源代码问题也是一样.
连接字符串我网上查了,我直接从config里粘出来应该可以,剩下就是设置问题了.
企业资源管理器我根本找不到,还有网上说的类似问题的一些工具什么的我也没有,所以怀疑系统不全.但愿我错了,最好只是个小问题.
希望到2008年前能解决这个问题.
谢谢帮忙!
#19
杀虫剂2007-12-14 16:14
这个金山毒霸在线升级好慢呀!今天是装不了VS了.
SQL sever  manager的所有功能我都使了个遍(全加一块也没几个功能),反反复复改也没用.
"该用户与可信SQL server连接无关联",这个问题网上很多,不过解决方法我只能做到一半,另一半提到的工具我就是找不到.
我现在用SQL sever数据库是迫不得已,因为access2007数据库我的VS不认,网上说要用12.0的ADO可是我下载了升级包,安装后VS里也没有这一项,在office2007里找也找不到.这该怎么办呢?
#20
skwenl2007-12-14 18:43
原帖由 [bold][underline]杀虫剂[/underline][/bold] 于 2007-12-13 17:18 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1146484&ptid=192186][/url]
我登陆服务器使用的是windows 身份验证,没有用户名和密码。

应该就是这里的问题了,登sql用户名要用sa,在sql数据库里还要设置点东东哦.
#21
杀虫剂2007-12-17 13:34
重装系统后,还是不行.
下了个3个多G的VS,一装发现是180天试用版,郁闷中......
我用的VS安装自带的SQL server configuration Manager是不是不行呀,需要另外下载个SQL server 2005吗?
仔细看了看fairy4贴的图,他那个是SQL server enterprise 的,我的是SQL server的.差了个enterprise,难怪说的企业企业的我都找不到!
skwenl说的“登sql用户名要用sa,在sql数据库里还要设置点东东” 要设什么呀,怎么设呀?
还有如果要用Access2007做数据库,怎样才能用?
谢谢了!!!
#22
fairy42007-12-17 15:07
vs自帶的沒用,必須安裝SQL server

skwenl说的“登sql用户名要用sa,在sql数据库里还要设置点东东"
這句話是錯的,默認的用戶是sa,但是可以添加數據庫用戶,不一定要是sa,你根據安裝提示裝sql數據庫,很簡單的,注意最好不要用操作系統帳號做數據庫的用戶!
#23
杀虫剂2007-12-17 15:19
问题已解决
问题已解决,贴出来留给后来的新手.
1>如果用SQL数据库,在建立连接的时候要选第二项ODBC数据源,建数据库文件时要选第五项,建好后选第二项进行连接.
  我一开始只用建立SQL server数据库这一项,发现连接不了,就选windows身份验证,结果出了问题.
2>所谓的企业数据管理器是SQL server2000中的,SQL server2005已经取消了,所以在SQL server2005中根本找不到.
3>在SQL server2005中,配置文件为SQL Server configation Manager.在这里,要将未启用的全都启用.在SQL server2005的->配置工具-〉SQL server 外围应用配置器里将-〉服务器和连接的外围应用配置器-〉DataBase Engine-〉远程连接 从尽限本地连接改为同时使用TCP/IP和named pipes。

这几天净上网查了,总算没白费功夫。
再次感谢fairy4等回复我的帖子给我提供帮助的朋友。
1