Vb.Net 2010-具有自动数值的SQL Insert命令

Vb.Net 2010-具有自动数值的SQL Insert命令,sql,vb.net,Sql,Vb.net,我希望使用SQL添加一个具有自动数值的行 我正在使用Studio VB 2010。我有一个非常简单的表,有两个字段: ID自动数字 模型文本字段 constr = "INSERT INTO procedures VALUES('" & txtFName.Text & "')" cmd = New OleDbCommand(constr, cn) cn.Open() Me.i = cmd.ExecuteNonQuery 一条消息说缺少一个参数,

我希望使用SQL添加一个具有自动数值的行

我正在使用Studio VB 2010。我有一个非常简单的表,有两个字段: ID自动数字 模型文本字段

    constr = "INSERT INTO procedures VALUES('" & txtFName.Text & "')"
    cmd = New OleDbCommand(constr, cn)

    cn.Open()
    Me.i = cmd.ExecuteNonQuery
一条消息说缺少一个参数, 所以我的问题是。。。 如何在SQL命令中添加此自动值?(ID)

我应该得到最后的身份证号码和+1吗??我想一定有个简单的方法

多谢各位

更新#1 我现在正在尝试建议的参数化查询。。。 我找到了这个例子

  Dim cmdText As String = "INSERT INTO procedures VALUES (?,?)"
    Dim cmd As OleDbCommand = New OleDbCommand(cmdText, con)
    cmd.CommandType = CommandType.Text
    With cmd.Parameters
        .Add("@a1", OleDbType.Integer).Value = 0
        .Add("@a2", OleDbType.VarChar).Value = txtFName.Text
    End With
    cmd.ExecuteNonQuery()
    con.Close()
但我还是犯了一个语法错误。 有什么想法吗

谢谢大家


更新#2 如果我给出下一个身份证号码,这段代码似乎有效,但同样,我如何能自动做到这一点

Dim cmdText As String = "INSERT INTO procedures VALUES (?,?)"
Dim cmd As OleDbCommand = New OleDbCommand(cmdText, con)
cmd.CommandType = CommandType.Text
    With cmd.Parameters
        .AddWithValue("@a1", OleDbType.Integer).Value = 3
        .AddWithValue("@a2", OleDbType.VarChar).Value = txtFName.Text
    End With
    cmd.ExecuteNonQuery()
    con.Close()
有什么评论吗?再次感谢

更新#3此代码给我Syntaxis错误 我只需要更新一列,第二列是自动编号列,我被告知要尝试

 Dim Con As OleDbConnection = New OleDbConnection(dbProvider & dbSource)
 Dim SQL_command As String = "INSERT INTO procedures (procedure) VALUES ('Model')"
Dim cmd As OleDbCommand = New OleDbCommand(SQL_command, Con)

    Try
        Con.Open()
        cmd.ExecuteNonQuery()
    Catch ex As Exception
        Throw ex
    Finally
        Con.Close()
        Con.Dispose()
    End Try
更新#4-解决方案

我把这段代码放在这里,以防有人发现它有用

    dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;"
    dbSource = "Data Source = c:\gastrica\dabase.accdb"
    Con.ConnectionString = dbProvider & dbSource


Dim Con As OleDbConnection = New OleDbConnection(dbProvider & dbSource)
    Dim SQL_command As String = "INSERT INTO [procedures] ([procedure]) VALUES (?)"
    Dim cmd As OleDbCommand = New OleDbCommand(SQL_command, Con)
    cmd.CommandType = CommandType.Text
    With cmd.Parameters
        .AddWithValue("@procedure", OleDbType.VarChar).Value = txtFName.Text
    End With

    Try
        Con.Open()
        cmd.ExecuteNonQuery()
        Dim varProcedure As String = cmd.Parameters("@procedure").Value.ToString()
        MessageBox.Show("Record inserted successfully. Procedure = " & varProcedure)
    Catch ex As Exception
        Throw ex
    Finally
        Con.Close()
    End Try

感谢大家的评论和帮助。

您需要指定以下列:

INSERT INTO procedures (columnname, columnname2) VALUES ('test', 'test');
下面是一个sql FIDLE示例:

试试这个:

constr = "INSERT INTO procedures (ID, Model) VALUES (0,'" & txtFName.Text & "')"
'or (not sure)
constr = "INSERT INTO procedures (Model) VALUES ('" & txtFName.Text & "')"

当使用0作为值时,请在自动数字字段中插入下一个数字,谢谢您的回答

我做不到,这会给我带来错误。因此,我最终得到了一个达到下一个自动值的变量。使用简单的SQL命令。 然后,一切顺利

 vNextAuto = GetDB_IntValue("SELECT TOP 1 * FROM procedures ORDER BY ID DESC", "ID") + 1

    Dim SQL_command As String = "INSERT INTO procedures VALUES (?,?)"
    Dim cmd As OleDbCommand = New OleDbCommand(SQL_command, Con)
    cmd.CommandType = CommandType.Text
    With cmd.Parameters
        .AddWithValue("@id", OleDbType.Integer).Value = vNextAuto
        .AddWithValue("@a2", OleDbType.VarChar).Value = txtFName.Text
    End With

    Try
        Con.Open()
        cmd.ExecuteNonQuery()
        'Dim id As String = cmd.Parameters("@id").Value.ToString()
        'MessageBox.Show("Record inserted successfully. ID = " & id)
    Catch ex As Exception
        Throw ex
    Finally
        Con.Close()
        Con.Dispose()
    End Try

如果不指定要插入的列,则必须按正确顺序为每列提供值。如果不打算这样做,则必须指定要插入的列。明确地说,您没有提供价值。自动编号的关键在于它是自动生成的。您需要更改SQL代码以指定为其提供值的列。此外,不要使用字符串连接将值插入SQL代码中。了解如何在ADO.NET代码中使用参数。感谢@jmcilhinney的回复。如果我同时提供这两个值,效果会很好,但是,我仍然需要自动插入这个自动数值。当我试图只指定文本列(即模型)时,会显示Syntaxis错误。我已经告诉过你该怎么做。指定要插入的列,并为指定的列提供值。如果您只想插入到一列,那么请指定该列并提供该值。嘿@jmcillhinney,这会给我一个语法错误。谢谢您的帮助Eduardo。我已经试过了这两条线,我得到的只是一个语法错误。我猜它在表名后带有parentesis。Answers应始终更正OP以使用参数,以避免sql注入和格式错误。感谢您的帮助@sqlsquirrel。Answers应始终更正OP以使用参数,以避免sql注入和格式错误。我不知道这如何可能用于标识字段,假设您使用的是SQL Server。如果没有额外的T-SQL,则无法插入到标识字段中。您正在使用SQL Server吗?ID字段实际上是一个标识字段,它是自动分配ID值的字段吗?还要注意的是,在大容量系统中,您的方法适用于重复ID,这将开始向用户抛出错误。不,我没有使用SQL Server,我想我使用的是ADO.net(对不起,我不是这方面的专家)。我用它来打开数据库dbProvider=“PROVIDER=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;“dbSource=“Data Source=c:\gastrica\database.accdb”