杀虫剂 发表于 2007-12-13 10:49

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

数据就是写不进数据库!!!
也许不是代码问题,但问题可能出在哪里呢?
我在网上也搜了好几天了,没有类似的问题.

请大家帮忙看看这段代码哪里有问题,谢谢!
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()
            Transaction.Commit()
        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')"
自己研究好几天了,不知道哪里错了.
谢谢了!!!

fairy4 发表于 2007-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
        command.CommandText = SQLString

        Try
            Count = command.ExecuteNonQuery()
            transaction.Commit()
        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]]

杀虫剂 发表于 2007-12-13 15:26

不同的地方有这些:
1\ Functiong中的 command.CommandText = 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--->设置里面粘下来的,因为其他的设置会出错.(我不太肯定这么做对不对,这个连接字符串是系统自动生成的)
如果是连接字符串的问题,我应该怎么做呢,如果不是......
      问题还是没有解决
      我知道这是我学习上的一个坎,请帮助一下.谢谢了!

fairy4 发表于 2007-12-13 16:48

[attach]31273[/attach]
我是運行成功,你看圖片!

杀虫剂 发表于 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的配置,改成正在运行和自动,还有网络\本地都可以.还是不行.

只要不是系统生成的连接字符串一编译就出错
数据库就是添加不了
高手们快帮帮忙吧!!!!!!!

fairy4 发表于 2007-12-13 17:01

看來你的連接字符串有問題!!!!


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

??不調用這個,你怎么插數據?

fairy4 发表于 2007-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:數據庫名
你自己進企業管理器有問題沒???????

杀虫剂 发表于 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()
            Transaction.Commit()
        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

我就是这么做的,添加不了呀!

杀虫剂 发表于 2007-12-13 17:18

我登陆服务器使用的是windows 身份验证,没有用户名和密码。

fairy4 发表于 2007-12-13 18:02

我已經告訴你問題所在,我的程序也能正常執行,其他的....
我不可能幫你去建立一個數據庫!然后幫你去調式代碼,我公司也不會允許我去建立數據庫!

杀虫剂 发表于 2007-12-14 08:28

不管怎样,先谢谢了!
我自己再想想.

杀虫剂 发表于 2007-12-14 09:32

我试了试创建SQL账户,显示错误:
"该用户与可信SQL server连接无关联",创建不了.
另外,找不到你说的企业资源管理器,菜单和工具栏都没有这一项,SQL sever manager里也没有。
我再查查看.

fairy4 发表于 2007-12-14 09:43

試下系統元件!
SqlDataAdapter
看你能正確找到數據庫,看到你要的字段不!!!???
系統會提示你怎么操作的,根據這個寫個連接字串就可以了

杀虫剂 发表于 2007-12-14 10:12

不仅能找到数据库,而且在服务器资源管理器--〉数据连接--〉表--〉table1用右键--〉显示数据表
都可以向数据库中添加数据,这个操作是确实添加到数据库中了,运行后能看得到。但是运行程序时就是添加不了。
另外,我用你贴的代码重新建了个工程,如果数据库用SQL帐号,创建的时候就显示
"该用户与可信SQL server连接无关联",根本创建不了。
如果用windows账户,可以创建,但运行时报错
“System.Data.SqlClient.SQLException:对象名‘test’无效”
用F8逐语句编译,发现
    Try
            Count = command.ExecuteNonQuery()
            transaction.Commit()
        Catch ex As Exception
            MsgBox(ex.ToString())
        Finally
            connection.Close()
        End Try
Try没有执行到,直接进入Catch ex As Exception 行,然后报错。

再有,企业资源管理器我的VS界面没有,SqlDataAdapter也没找到。

杀虫剂 发表于 2007-12-14 13:36

真没辙了,回头重装系统试试。

fairy4 发表于 2007-12-14 15:36

test是表名,你的數據庫沒這個表[em12] [em12] [em12] [em08]

fairy4 发表于 2007-12-14 15:38

企业资源管理器是數據庫管理器
就是你說的 SQL sever manager
SqlDataAdapter 在vs的工具箱的   資料  一欄里面

杀虫剂 发表于 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年前能解决这个问题.
谢谢帮忙!

杀虫剂 发表于 2007-12-14 16:14

这个金山毒霸在线升级好慢呀!今天是装不了VS了.
SQL sever  manager的所有功能我都使了个遍(全加一块也没几个功能),反反复复改也没用.
"该用户与可信SQL server连接无关联",这个问题网上很多,不过解决方法我只能做到一半,另一半提到的工具我就是找不到.
我现在用SQL sever数据库是迫不得已,因为access2007数据库我的VS不认,网上说要用12.0的ADO可是我下载了升级包,安装后VS里也没有这一项,在office2007里找也找不到.这该怎么办呢?

skwenl 发表于 2007-12-14 18:43

[quote]原帖由 [bold][underline]杀虫剂[/underline][/bold] 于 2007-12-13 17:18 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1146484&ptid=192186][img]http://bbs.bc-cn.net/images/common/back.gif[/img][/url]
我登陆服务器使用的是windows 身份验证,没有用户名和密码。 [/quote]
应该就是这里的问题了,登sql用户名要用sa,在sql数据库里还要设置点东东哦.

页: [1] 2

编程论坛