0

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

第一个代码:没有自动编号主键字段,效果很好。但直到我尝试添加任何字段都没有不同的行。我必须拥有 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);
4

3 回答 3

3

试试这个:在你的 insert sql 命令之后,执行另一个 sql 调用:

SELECT @@IDENTITY

返回的结果将是与刚刚添加的记录关联的自动编号字段。您最初的插入 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
     );
于 2012-03-22T20:38:21.533 回答
2

我不确定你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);

注意:我没有测试过 编辑:添加了一个缺少的昏迷

于 2012-03-22T20:39:03.860 回答
1

我在网上搜索了一段时间,试图围绕我得到的回复。所有这些都是很好的建议。这是“奥卡姆剃刀”的一个很好的例子。我在“string 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;
于 2012-04-02T19:52:43.393 回答