C# 表单/访问数据库 带有"autonumber"字段的插入行



据我所知,以下两个C#代码示例将信息写入Access数据库,应该会产生相同的输出。然而,第一个是有效的,第二个是错误的。

第一个代码:如果没有AutoNumber主键字段,效果非常好。但直到我尝试添加一行,其中任何字段都没有不同。我必须有AUTONUMBER唯一ID,(由于缺乏不确定性的明显原因)

string vsql = string.Format("insert into Log values " +
    "('{0}','{1}',{2},{3},'{4}',#{5}#,'{6}')",
    comboBox1.Text,
    comboBox2.Text,
    int.Parse(textBox1.Text),
    int.Parse(textBox1.Text),
    textBox3.Text,
    textBox2.Text,
    addRemove
    );

第二个代码:返回错误消息:

"附加信息:查询值和目的地字段的数量不相同。"

据我所见,它们都有相同数量的字段。尽管如此,两者都没有唯一的AUTONUMBER ID字段,我无法添加该字段,因为我不知道如何将代码"插入"或"不插入"到自动编号字段中。再说一遍,我显然需要场地。感谢您的帮助!只要我有一个自动编号字段,当我的表单提交新记录时,该字段将自动更新,那么这两种代码都是可以接受的。

string vsql = string.Format("INSERT INTO Log (" +
    "Location, " +
    "Drug, " +
    "Quantity, " +
    "Strength, " +
    "Initials, " +
    "'Date'," +
    "add_Remove" +
    ") VALUES (" +
    comboBox1.Text,
    comboBox2.Text,
    int.Parse(textBox1.Text),
    int.Parse(textBox1.Text),
    textBox3.Text,
    textBox2.Text,
    addRemove);

试试这个:插入sql命令后,立即执行另一个sql调用:

SELECT @@IDENTITY

返回的结果将是与刚刚添加的记录关联的自动编号字段。您原来的insert sql命令不应该试图插入自动编号字段值。省略它。

另外,您的第二个sql文本也有问题。将其重新格式化为如下所示:

string vsql = string.Format("insert into Log (Location,Drug,Quantity,"+
   "Strength,Initials,Date,add_Remove values" +
   "('{0}','{1}',{2},{3},'{4}',#{5}#,'{6}')",
     comboBox1.Text,
     comboBox2.Text,
     int.Parse(textBox1.Text),
     int.Parse(textBox1.Text),
     textBox3.Text,
     textBox2.Text,
     addRemove
     );

我不确定您是否正确使用了String.Format

尝试发展这个代码:

string vsql = string.Format(
    "INSERT INTO Log ( Location, Drug, Quantity, Strength, Initials, [Date], add_Remove) "   +
    "VALUES ('{0}', '{1}', {2}, {3}, '{4}', '{5}', '{6}')",
    comboBox1.Text, comboBox2.Text, int.Parse(textBox1.Text), int.Parse(textBox1.Text),
    textBox3.Text, textBox2.Text, addRemove);

注意:我还没有测试编辑:添加了一个丢失的昏迷

我在网上搜索了一段时间,试图了解我得到的回复。所有这些都是很好的建议。这是"奥卡姆剃刀"的一个很好的例子。我在"字符串vsql"行之前插入了以下内容,它就像一个符咒。

感谢所有的回应!

OleDbCommand dbCommand;
OleDbDataReader dbReader;
new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;data source=C:MyDatabase.accdb");
dbCommand = new OleDbCommand("select count(*) as Record_Count from Log", vcon);
dbReader = dbCommand.ExecuteReader();
if (dbReader.Read() == true)
    rowCount = dbReader["Record_Count"].ToString();
else
    return;

相关内容

  • 没有找到相关文章

最新更新