【问题标题】:Insert into Database using OleDbConnection使用 OleDbConnection 插入数据库
【发布时间】:2015-06-19 12:05:14
【问题描述】:

我几乎完成了我的代码,但之前从未将数据插入数据库。到目前为止,我的 SQL 语句运行良好,但代码的最终执行我不知道该怎么做。

新记录没有出现在我的数据库中,所以我认为我在最后遗漏了几行使新记录执行的行。

Protected Sub Insert_Click(sender As Object, e As EventArgs) Handles Insert.Click

    Dim v_Date = DateText.Text
    Dim v_Username = UserText.Text
    Dim v_Phone = PhoneText.Text
    Dim v_Email = EmailText.Text
    Dim v_Category = CategoryList.Text
    Dim v_Short = ShortText.Text
    Dim v_Long = longText.Value

    Dim conn As OleDbConnection = New OleDbConnection("Provider=""*********"";user id=" & strUserID & ";data source=" & strDatabase & ";password=" & strPssWd)

    Dim ClassifiedStr As OleDbCommand = New OleDbCommand("INSERT INTO TABLENAME (Date, Username, Phonenbr, Email, Category, Description, Fulldescription) values('" & v_Date & "',lower('" & v_Username & "'),'" & v_Phone & "','" & v_Email & "','" & v_Category & "','" & v_Short & "','" & v_Long & "'", conn)
    'ClassifiedStr.CommandType = CommandType.StoredProcedure
    Dim OracleDataAdapterAds As OleDbDataAdapter = New OleDbDataAdapter
    OracleDataAdapterAds.SelectCommand = ClassifiedStr
    Dim DsAds As DataSet = New DataSet
    DsAds.Clear()
    'OracleDataAdapterAds.Fill(DsAds, "TABLENAME")
    conn.Open()
    'ClassifiedStr.ExecuteNonQuery()


End Sub

更新

错误

    Dim v_Date = DateText.Text
    Dim v_Username = UserText.Text
    Dim v_Phone = PhoneText.Text
    Dim v_Email = EmailText.Text
    Dim v_Category = CategoryList.Text
    Dim v_Short = ShortText.Text
    Dim v_Long = longText.Value

    Dim conn As OleDbConnection = New OleDbConnection("Provider=""********"";user id=" & strUserID & ";data source=" & strDatabase & ";password=" & strPssWd)
    conn.Open()

    Dim ClassifiedStr As OleDbCommand = New OleDbCommand("INSERT INTO TABLENAME (Date, Username, Phonenbr, Email, Category, Description, Fulldescription) values(@v_Date, lower(@v_Username), @v_Phone, @v_Email, @v_Category, @v_Short, @v_Long)", conn)
    ClassifiedStr.Parameters.Add("@v_Date", OleDbType.Date).Value = v_Date
    ClassifiedStr.Parameters.Add("@v_Username", OleDbType.VarChar).Value = v_Username
    ClassifiedStr.Parameters.Add("@v_Phone", OleDbType.VarChar).Value = v_Phone
    ClassifiedStr.Parameters.Add("@v_Email", OleDbType.VarChar).Value = v_Email
    ClassifiedStr.Parameters.Add("@v_Category", OleDbType.VarChar).Value = v_Category
    ClassifiedStr.Parameters.Add("@v_Short", OleDbType.VarChar).Value = v_Short
    ClassifiedStr.Parameters.Add("@v_Long", OleDbType.VarChar).Value = v_Long

    ClassifiedStr.ExecuteNonQuery()
    conn.Close()

【问题讨论】:

  • 使用带有executenonquery的命令,但首先要开始学习如何编写参数化查询
  • 我尝试了 :OracleDataAdapterAds.SelectCommand =ClassifiedStr conn.Open() ClassifiedStr.ExecuteNonQuery() conn.Close() 的结尾,但我收到了一个 ExecuteNonQuery 错误,就像我在其他问题中看到的一样
  • 呀。同意史蒂夫
  • 在查询引擎中运行您的查询并查看更改/输出
  • 我同意使用参数化查询的建议。但是,您似乎缺少 "values("

标签: asp.net vb.net insert sql-update oledbcommand


【解决方案1】:

您不需要使用数据适配器,因为您不会将数据返回给客户端,而是使用ExecuteNonQuery(),因此类似于(添加了参数化):

Protected Sub Insert_Click(sender As Object, e As EventArgs) Handles Insert.Click
    Using conn As New OleDbConnection("Provider=""*********"";user id=" & strUserID & ";data source=" & strDatabase & ";password=" & strPssWd)
        conn.Open()

        Using ClassifiedStr As New OleDbCommand("INSERT INTO t_classifieds (""Date"", Username, Phonenbr, Email, Category, Description, Fulldescription) values(@v_Date, lower(@v_Username), @v_Phone, @v_Email, @v_Category, @v_Short, @v_Long)", conn)
            ClassifiedStr.Parameters.Add("@v_Date", OleDbType.Date).Value = DateText.Text
            ClassifiedStr.Parameters.Add("@v_Username", OleDbType.VarChar).Value  = UserText.Text
            ClassifiedStr.Parameters.Add("@v_Phone", OleDbType.VarChar).Value = PhoneText.Text
            ClassifiedStr.Parameters.Add("@v_Email", OleDbType.VarChar).Value = EmailText.Text
            ClassifiedStr.Parameters.Add("@v_Category", OleDbType.VarChar).Value = CategoryList.Text
            ClassifiedStr.Parameters.Add("@v_Short", OleDbType.VarChar).Value = ShortText.Text
            ClassifiedStr.Parameters.Add("@v_Long", OleDbType.VarChar).Value = longText.Value

            ClassifiedStr.ExecuteNonQuery()
        End Using
    End Using
End Sub

【讨论】:

  • 好的 这就是人们所说的参数化的意思。检查我的更新(通过使用它,我再次从 ExecuteNonQuery 收到 MISSING SELECT 错误)
  • 等等,我没有在 SQL 中执行 @values。给我秒
  • 也许您不能将表示日期的字符串分配给 v_date。尝试类似 ClassifiedStr.Parameters.Add("@v_date", OleDbType.Date).Value = DateTime.Parse(DateText.Text)
  • 您可能需要引用与保留字匹配的列名(如日期)
  • 我建议通过控制台检查 SQL 到您的数据库;我手头没有 Oracle 服务器,因此无法确认是否需要引用任何其他列(可能是username?),但您需要确定问题出在您的 SQL 上,还是您的代码调用它。
【解决方案2】:
Protected Sub Insert_Click(sender As Object, e As EventArgs) Handles Insert.Click

    Dim v_Date = DateText.Text
    Dim v_Username = UserText.Text
    Dim v_Phone = PhoneText.Text
    Dim v_Email = EmailText.Text
    Dim v_Category = CategoryList.Text
    Dim v_Short = ShortText.Text
    Dim v_Long = longText.Value

    Dim conn As OleDbConnection = New OleDbConnection("Provider=""*********"";user id=" & strUserID & ";data source=" & strDatabase & ";password=" & strPssWd)
    conn.Open();
    Dim ClassifiedStr As OleDbCommand = New OleDbCommand("INSERT INTO t_classifieds ([Date], Username, Phonenbr, Email, Category, Description, Fulldescription) values(@v_Date, lower(@v_Username), @v_Phone, @v_Email, @v_Category, @v_Short, @v_Long)", conn)
    ClassifiedStr.Parameters.Add(new OleDbParameter("@v_Date", v_Date))
    ClassifiedStr.Parameters.Add(new OleDbParameter("@v_Username", v_Username))
    ClassifiedStr.Parameters.Add(new OleDbParameter("@v_Phone", v_Phone))
    ClassifiedStr.Parameters.Add(new OleDbParameter("@v_Email", v_Email))
    ClassifiedStr.Parameters.Add(new OleDbParameter("@v_Category", v_Category))
    ClassifiedStr.Parameters.Add(new OleDbParameter("@v_Short", v_Short))
    ClassifiedStr.Parameters.Add(new OleDbParameter("@v_Long",v_Long))


    ClassifiedStr.ExecuteNonQuery()
    conn.Close()


End Sub

【讨论】:

    【解决方案3】:

    由于某种原因,INSERT SQL 经常给我带来问题,所以我决定改用存储过程。

    使用我在 Oracle 中的存储过程,以下是我的 VB.net 代码:

    Dim ClassifiedStr As New OleDbCommand
    
        ClassifiedStr.CommandType = CommandType.StoredProcedure
        ClassifiedStr.CommandText = "Insert_classifieds"
        ClassifiedStr.Connection = conn
    
        'Must be organized based on Stored Procedure
        ClassifiedStr.Parameters.Add("val_date", OleDbType.Date).Value = DateText.Text
        ClassifiedStr.Parameters.Add("val_category", OleDbType.VarChar, 40).Value = CategoryList.Text
        ClassifiedStr.Parameters.Add("val_user", OleDbType.VarChar, 20).Value = UserText.Text
        ClassifiedStr.Parameters.Add("val_phone", OleDbType.VarChar, 20).Value = PhoneText.Text
        ClassifiedStr.Parameters.Add("val_email", OleDbType.VarChar, 50).Value = EmailText.Text
        ClassifiedStr.Parameters.Add("val_shortDes", OleDbType.VarChar, 100).Value = ShortText.Text
        ClassifiedStr.Parameters.Add("val_longDes", OleDbType.VarChar, 4000).Value = longText.Value
        conn.Open()
    
        ClassifiedStr.ExecuteNonQuery()
        conn.Close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多