Vb.Net 2010-具有自动数值的SQL Insert命令
我希望使用SQL添加一个具有自动数值的行 我正在使用Studio VB 2010。我有一个非常简单的表,有两个字段: ID自动数字 模型文本字段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 一条消息说缺少一个参数,
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”