How do INSERT INTO Firebird, with autoincrement for the primary key?

后端 未结 2 529
一整个雨季
一整个雨季 2020-12-22 04:38

How do INSERT INTO Firebird, with autoincrement for the primary key?

For the table fields I have:

fstPriority VARCHAR(30), fstInfo VARCHAR(100), fstD         


        
2条回答
  •  执笔经年
    2020-12-22 05:09

    Definitions:

    public const string stMAIN_TABLE_NAME = " OrgTable ";
    public const string stDELETED_TABLE_NAME = "  BackupTable ";
    
    public const string stFIELD_DEFINITIONS = " fstPriority VARCHAR(30)" + 
                                              ", fstInfo VARCHAR(100)" +
                                              ", fstDateCreated VARCHAR(30)" +
                                              ", fstDateModified VARCHAR(30)" +
                                              ", fiKeyID INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY ";
    public const string stFIELD_NAMES = " fstPriority" + 
                                        ", fstInfo" + 
                                        ", fstDateCreated" + 
                                        ", fstDateModified" + 
                                        ", fiKeyID ";
    public const string stFIELD_NAMES_NO_KEY_ID = " fstPriority" + 
                                                  ", fstInfo" + 
                                                  ", fstDateCreated" + 
                                                  ", fstDateModified ";
    

    Code:

    //------------------------------
    static private bool boCreateDatabaseTables(string stPathFilename, 
                                               string stUserID, 
                                               string stPassword, 
                                               List liststTableNames, 
                                               List liststFieldDefinitions) 
    {
        bool boErrorFlag = false;
        int iTablesCount = liststTableNames.Count();
        string stOpenConn = new FbConnectionStringBuilder {
            Database = stPathFilename,
            UserID = stUserID,
            Password = stPassword,
            ServerType = FbServerType.Embedded,
            ClientLibrary = stCLIENT_LIBRARY
        }.ToString();
        using (FbConnection fbConn = new FbConnection(stOpenConn)) {
            try {
                fbConn.Open();
    
                FbTransaction fbTransaction = fbConn.BeginTransaction();
                for (int ii = 0; ii < iTablesCount; ii++) {
                    string stSql = "CREATE TABLE " + liststTableNames[ii] + "( " + liststFieldDefinitions[ii] + ")";
                    FbCommand fbCmd = new FbCommand(stSql, fbConn, fbTransaction);
                    fbCmd.ExecuteNonQuery();
                }
                fbTransaction.Commit();
            }
            catch (Exception ex) {
                boErrorFlag = true;
                MessageBox.Show("catch ... GlobalsFirebird ... boCreateDatabaseTables ... " + ex.Message);
            }
        }
        return boErrorFlag;
    }//boCreateDatabaseTables
    //------------------------------
    //------------------------------
    static public bool boAddRow(string stPathFilename,
                                string stUserID,
                                string stPassword,
                                string stTableName,
                                string stFieldNamesNoKeyId,
                                List liststFieldValuesNoKeyId) 
    {
        bool boErrorFlag = false;
        string stOpenConn = new FbConnectionStringBuilder {
            Database = stPathFilename,
            UserID = stUserID,
            Password = stPassword,
            ServerType = FbServerType.Embedded,
            ClientLibrary = stCLIENT_LIBRARY
        }.ToString();
    
        using(FbConnection fbConn = new FbConnection(stOpenConn)) {
            fbConn.Open();
            try {
                string stValuesPlaceHolder = "@p0";
                for (int iii = 1; iii < liststFieldValuesNoKeyId.Count; iii++)
                    stValuesPlaceHolder += ", @p" + (iii).ToString();
                FbTransaction fbTransaction = fbConn.BeginTransaction();
                string stCmd = "INSERT INTO " + stTableName + "(" + stFieldNamesNoKeyId + ") VALUES ( " + stValuesPlaceHolder + " ) RETURNING  fiKeyID ";
                FbCommand fbCmd = new FbCommand(stCmd, fbConn, fbTransaction);
    
                for (int iii = 0; iii < liststFieldValuesNoKeyId.Count; iii++) {
                    string stPlaceHolder = "@p" + (iii).ToString();
                    string stValue = liststFieldValuesNoKeyId[iii];
                    fbCmd.Parameters.AddWithValue(stPlaceHolder, stValue);
                }
                fbCmd.Parameters.Add(new FbParameter() { Direction = System.Data.ParameterDirection.Output });
                fbCmd.ExecuteNonQuery();
                fbTransaction.Commit();
            }
            catch (Exception ex) {
                boErrorFlag = true;
                MessageBox.Show("catch ... GlobalsFirebird ... boAddRow ... " + ex.Message);
            }
        }
        return boErrorFlag;
    }//boAddRow
    //------------------------------        
    

提交回复
热议问题