从数据库中获取autoNumber值

时间:2011-11-24 13:48:19

标签: c# ms-access oledb autonumber

代码如下。 在我的代码中,我更新现有行(从现有表),程序从textBoxes获取所有更新的值。 表autoNumber字段的末尾(最后一列),名为“codonsAutoNum”

我不知道如何从数据库中获取值(自动编号值)。 我需要位置(在代码中)中有'??'的值。

谢谢大家的帮助!

代码:

        private void update_Click(object sender, EventArgs e)
    {
        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
        OleDbConnection myConnection = new OleDbConnection(connectionString);
        string myInsertQuery =(String.Format("UPDATE tblCodons SET codonsCodon1='{0}', codonsCodon3='{1}', " + 
        "codonsTriplet1='{2}', codonsTriplet2='{3}', codonsTriplet3='{4}', codonsTriplet4='{5}', " + 
        "codonsTriplet5='{6}', codonsTriplet6='{7}', codonsFullName='{8}'" + 
        " WHERE codonsAutoNum='{9}'",codon1.Text, codon3.Text ,triplet1.Text, triplet2.Text,
         triplet3.Text, triplet4.Text, triplet5.Text, triplet6.Text,
        fullName.Text,??));
        OleDbCommand myCommand = new OleDbCommand(myInsertQuery);
        myCommand.Connection = myConnection;
        myConnection.Open();
        myCommand.ExecuteNonQuery();
        myCommand.Connection.Close();

编辑:它真的很困惑。我的代码怎么看起来好像? 我需要把“SELECT @@ identity”放在哪里?我不明白为什么我不能拿这个值? (我需要它作为所选行的索引来计算更新的位置。当我识别它时(下面)它运行良好但它不允许我更改fullname字段..这是一个比自动编号列更好的解决方案?

        private void update_Click(object sender, EventArgs e)
    {


        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";

        OleDbConnection myConnection = new OleDbConnection(connectionString);
        string myInsertQuery =(String.Format("UPDATE tblCodons SET codonsCodon1='{0}', codonsCodon3='{1}', " + 
        "codonsTriplet1='{2}', codonsTriplet2='{3}', codonsTriplet3='{4}', codonsTriplet4='{5}', " + 
        "codonsTriplet5='{6}', codonsTriplet6='{7}', codonsFullName='{8}'" + 
        " WHERE codonsFullName = {9}",codon1.Text, codon3.Text ,triplet1.Text, triplet2.Text,
         triplet3.Text, triplet4.Text, triplet5.Text, triplet6.Text,
        fullName.Text,this.name));
        OleDbCommand myCommand = new OleDbCommand(myInsertQuery);
        myCommand.Connection = myConnection;
        myConnection.Open();
        myCommand.ExecuteNonQuery();
        myCommand.Connection.Close();
        this.tblCodonsTableAdapter.Fill(this.myProjectDataSet.tblCodons);

name = fullname的保存值,每次点击值chages

还有一个问题。我试着用e.Row做同样的事情(我在每次点击表中都保存了)并且我得到一个错误“System.Data.OleDb.OleDbException(0x80004005):可以在索引上注意重复的值,或者在mainKey或关系“

2 个答案:

答案 0 :(得分:2)

看到这个:

http://msdn.microsoft.com/en-us/library/ks9f57t0(v=VS.80).aspx

请参阅“检索Microsoft Access自动编号值”部分

排序版

OleDbCommand cmdNewID = new OleDbCommand("SELECT @@IDENTITY",
            connection)

我不相信访问

中存在SCOPE_IDENTITY()

答案 1 :(得分:1)

我建议将查询从内联sql移动到存储过程。停止SQL注入并不是因为您可以设置存储过程以返回其刚刚创建的标识(自动编号)字段的值。只需让它在运行sql后返回SCOPE_IDENTITY。

所有这一切都假设您使用的是SQL服务器(我不熟悉其他数据库,但会假设它们具有相似的功能)

请参阅链接以获取更多信息

http://msdn.microsoft.com/en-us/library/ks9f57t0.aspx

编辑:WOW这个答案很快!为重复的答案道歉

EDIT2:看起来像访问公开了包含最后使用/创建的自动编号的变量@@ IDENTITY。所以你应该能够运行和内联查询,并按照'SELECT @@ IDENTITY AS prevID'的方式跟随另一个查询