用于插入的 ExecuteNonQuery()

Posted

技术标签:

【中文标题】用于插入的 ExecuteNonQuery()【英文标题】:ExecuteNonQuery() for Insert 【发布时间】:2013-07-17 17:48:48 【问题描述】:

你能告诉我这段代码有什么问题吗?

我需要使用DataAdapter 来插入表格吗?

我知道connectionString 没问题,因为我在服务器资源管理器上对其进行了测试。

    Dim mydao As New Connection
    Dim connectionString As String = mydao.GetConnectionString()
    Dim connection As New SqlConnection(connectionString)
    Dim cmd As New SqlCommand

Public Function add(ByVal area As String, ByVal user As String) As Integer

        cmd.CommandText = "INSERT into Area (Area, user) VALUES ('" + area + "','" + user + "')"
        Try
            connection.Open()
            Dim cant As Integer = cmd.ExecuteNonQuery()'it throws exception here
            connection.Close()
            Return cant
        Catch ex As Exception
            Console.WriteLine(ex.Message)
            Return 0
        End Try

    End Function

上面的代码在ExecuteNonQuery() 之后就失败了,不知道为什么。

目标字段 (SQL Server 2008):

AREA        varchar(100)  NOT NULL ,
USER        varchar(100)  NOT NULL 

我收到的异常是:Connection property has not initialized

【问题讨论】:

您收到什么错误信息? 您正在打开连接,但您似乎没有将命令的 Connection 属性设置为该连接。 连接属性未初始化 【参考方案1】:

此代码存在一些问题。

最重要的是您没有设置命令的Connection 属性,因此命令无法知道如何连接到数据库。

我还强烈建议您使用using 和parameterizing 您的查询:

最后,除非需要,否则不要在函数之外声明连接和命令。您应该只在需要时保持连接和命令。

所以你的函数最终看起来像:

Public Function add(ByVal area As String, ByVal user As String) As Integer

    Dim mydao As New Connection

    Using connection As New SqlConnection(mydao.ConnectionString())

        Using command As New SqlCommand()
            ' Set the connection
            command.Connection = connection 

            ' Not necessary, but good practice
            command.CommandType = CommandType.Text 

            ' Example query using parameters
            command.CommandText = "INSERT into Area (Area, user) VALUES (@area, @user)" 

            ' Adding the parameters to the command
            command.Parameters.AddWithValue("@area", area)
            command.Parameters.AddWithValue("@user", user)

            connection.Open()

            Return command.ExecuteNonQuery()

        End Using ' Dispose Command

    End Using ' Dispose (and hence Close) Connection

End Function

请注意,目前,您将一直返回 0。上面的示例无需检查函数返回的值,而是简单地抛出异常。这使得代码更简洁(因为调用者必须理解 0 是错误条件),并且,如果您需要处理异常,只需将对该函数的调用包装在 Try-Catch 块中

【讨论】:

以上是关于用于插入的 ExecuteNonQuery()的主要内容,如果未能解决你的问题,请参考以下文章

使用 c#ExecuteNonQuery 插入后 MS Access 表未正确刷新

如何使用 ExecuteNonQuery 在 VARCHAR(MAX) 列中插入超过 8000 个字符?

c#: ExecuteNonQuery() 返回 -1

VB.NET SQL Server 插入 - ExecuteNonQuery:连接属性尚未初始化

确定 ExecuteNonQuery 成功执行 [重复]

对 ExecuteNonQuery 的 Postgres 函数(通过 npgsql)调用返回 -1 作为受影响行的结果