无法进行连续的数据库插入

Unable to do consecutive database inserts

我正在尝试对 2 个不同的 table 连续执行 2 个 SQL 插入。

第一个 table 插入工作正常。它使用 SELECT SCOPE_IDENTITY() 提取索引号,然后我将其存储在变量 Registree_Index 中。这工作正常。

然后我尝试将 Registree_Index 和一些其他变量插入第二个 table。这根本不会写入第二个 table 。也没有错误信息。

最初我认为这个错误与重用我的旧查询和连接字符串变量有关,所以我创建了新的。这没有帮助。

有人对此有想法吗?代码如下...

private void WriteToDatabase()
{
    Guid newGuid = Guid.NewGuid();

    string yearstring = DateTime.Now.Year.ToString();
    string twodigityear = yearstring.Substring(yearstring.Length-2);
    string dateAndGuid = twodigityear + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + "-"  + DateTime.Now.Hour.ToString() + "-"  + DateTime.Now.Minute.ToString() + "-"  + DateTime.Now.Second.ToString() + "-" + newGuid;

    string connectionString = GetConnectionString();

    SqlConnection connection = new SqlConnection();
    connection.ConnectionString = connectionString;
    connection.Open();

    string insertQuery = "INSERT INTO registrees (UIDindex, Submission_Number, Homecoming_Form, HC_form, NewRecord, First_Name, Last_Name, Billing_Phone, Addresses_Same, Email) VALUES (@UIDindex, @Submission_Number, @Homecoming_Form, @HC_form, @NewRecord, @First_Name, @Last_Name, @Billing_Phone, @Addresses_Same, @Email)               SELECT SCOPE_IDENTITY()";

    SqlCommand cmd = new SqlCommand(insertQuery, connection);

    cmd.Parameters.AddWithValue("@UIDindex", dateAndGuid);
    cmd.Parameters.AddWithValue("@Submission_Number", 1);
    cmd.Parameters.AddWithValue("@Homecoming_Form", 1);
    cmd.Parameters.AddWithValue("@HC_form", "platform");
    cmd.Parameters.AddWithValue("@NewRecord", 1);

    cmd.Parameters.AddWithValue("@First_Name", First_Name.Text);
    cmd.Parameters.AddWithValue("@Last_Name", Last_Name.Text);

    cmd.Parameters.AddWithValue("@Billing_Phone", Phone.Text);
    cmd.Parameters.AddWithValue("@Addresses_Same", 1); 
    cmd.Parameters.AddWithValue("@Email", Email.Text);

    ///get index from scope identity
    int Registree_Index = Convert.ToInt32(cmd.ExecuteScalar());



    ///SO FAR EVERYTHING WORKS GREAT! BUT THE REST OF THIS CODE FAILS SOMEHOW.
    connection.Close();
    connection = null;
    insertQuery = null;
    cmd = null;

    string connectionString2 = GetConnectionString();
    SqlConnection connection2 = new SqlConnection();
    connection2.ConnectionString = connectionString2;
    connection2.Open();

    string insertQuery2 = "INSERT INTO event_registration (Registree_Index, UIDindex, Submission_Number) VALUES (@Registree_Index, @UIDindex, @Submission_Number)";

    SqlCommand cmd2 = new SqlCommand(insertQuery2, connection2);

    cmd2.Parameters.AddWithValue("@Registree_Index", Registree_Index);
    cmd2.Parameters.AddWithValue("@UIDindex", dateAndGuid);
    cmd2.Parameters.AddWithValue("@Submission_Number", 1);

}

我没看到你在哪里打电话cmd2.ExecuteScalar()

那是因为你从来没有执行过cmd2。由于 insertQuery2 只是插入到 event_registration table,你可以通过调用 cmd2.ExecuteNonQuery() 来执行 cmd2

附带说明一下,您应该考虑使用 using statement to make sure that connection and connection2 are closed after the queries are executed. Below is the modified code with using statement

private void WriteToDatabase()
{
    Guid newGuid = Guid.NewGuid();

    string yearstring = DateTime.Now.Year.ToString();
    string twodigityear = yearstring.Substring(yearstring.Length-2);
    string dateAndGuid = twodigityear + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + "-"  + DateTime.Now.Hour.ToString() + "-"  + DateTime.Now.Minute.ToString() + "-"  + DateTime.Now.Second.ToString() + "-" + newGuid;

    string connectionString = GetConnectionString();

    string insertQuery = "INSERT INTO registrees (UIDindex, Submission_Number, Homecoming_Form, HC_form, NewRecord, First_Name, Last_Name, Billing_Phone, Addresses_Same, Email) VALUES (@UIDindex, @Submission_Number, @Homecoming_Form, @HC_form, @NewRecord, @First_Name, @Last_Name, @Billing_Phone, @Addresses_Same, @Email)               SELECT SCOPE_IDENTITY()";
    int Registree_Index = 0;

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        using (SqlCommand cmd = new SqlCommand(insertQuery, connection))
        {
            cmd.Parameters.AddWithValue("@UIDindex", dateAndGuid);
            cmd.Parameters.AddWithValue("@Submission_Number", 1);
            cmd.Parameters.AddWithValue("@Homecoming_Form", 1);
            cmd.Parameters.AddWithValue("@HC_form", "platform");
            cmd.Parameters.AddWithValue("@NewRecord", 1);

            cmd.Parameters.AddWithValue("@First_Name", First_Name.Text);
            cmd.Parameters.AddWithValue("@Last_Name", Last_Name.Text);

            cmd.Parameters.AddWithValue("@Billing_Phone", Phone.Text);
            cmd.Parameters.AddWithValue("@Addresses_Same", 1); 
            cmd.Parameters.AddWithValue("@Email", Email.Text);

            connection.Open();

            ///get index from scope identity
            Registree_Index = Convert.ToInt32(cmd.ExecuteScalar());
        }
    }

    string connectionString2 = GetConnectionString();
    string insertQuery2 = "INSERT INTO event_registration (Registree_Index, UIDindex, Submission_Number) VALUES (@Registree_Index, @UIDindex, @Submission_Number)";

    using (SqlConnection connection2 = new SqlConnection(connectionString2))
    {
        using (SqlCommand cmd2 = new SqlCommand(insertQuery2, connection2))
        {
            cmd2.Parameters.AddWithValue("@Registree_Index", Registree_Index);
            cmd2.Parameters.AddWithValue("@UIDindex", dateAndGuid);
            cmd2.Parameters.AddWithValue("@Submission_Number", 1);

            connection2.Open();

            cmd2.ExecuteNonQuery();
        }
    }
}

这个怎么样...

private void WriteToDatabase()
    {
        Guid newGuid = Guid.NewGuid();

        string yearstring = DateTime.Now.Year.ToString();
        string twodigityear = yearstring.Substring(yearstring.Length - 2);
        string dateAndGuid = twodigityear + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + "-" + DateTime.Now.Hour.ToString() + "-" + DateTime.Now.Minute.ToString() + "-" + DateTime.Now.Second.ToString() + "-" + newGuid;
        int Registree_Index;

        using (SqlConnection connection = new SqlConnection(GetConnectionString()))
        {
            connection.Open();

            string insertQuery = "INSERT INTO registrees (UIDindex, Submission_Number, Homecoming_Form, HC_form, NewRecord, First_Name, Last_Name, Billing_Phone, Addresses_Same, Email) VALUES (@UIDindex, @Submission_Number, @Homecoming_Form, @HC_form, @NewRecord, @First_Name, @Last_Name, @Billing_Phone, @Addresses_Same, @Email)               SELECT SCOPE_IDENTITY()";

            using (SqlCommand cmd = new SqlCommand(insertQuery, connection))
            {

                cmd.Parameters.AddWithValue("@UIDindex", dateAndGuid);
                cmd.Parameters.AddWithValue("@Submission_Number", 1);
                cmd.Parameters.AddWithValue("@Homecoming_Form", 1);
                cmd.Parameters.AddWithValue("@HC_form", "platform");
                cmd.Parameters.AddWithValue("@NewRecord", 1);

                cmd.Parameters.AddWithValue("@First_Name", First_Name.Text);
                cmd.Parameters.AddWithValue("@Last_Name", Last_Name.Text);

                cmd.Parameters.AddWithValue("@Billing_Phone", Phone.Text);
                cmd.Parameters.AddWithValue("@Addresses_Same", 1);
                cmd.Parameters.AddWithValue("@Email", Email.Text);

                ///get index from scope identity
                Registree_Index = Convert.ToInt32(cmd.ExecuteScalar());
            }

            string insertQuery2 = "INSERT INTO event_registration (Registree_Index, UIDindex, Submission_Number) VALUES (@Registree_Index, @UIDindex, @Submission_Number)";

            using (SqlCommand cmd = new SqlCommand(insertQuery2, connection))
            {
                cmd.Parameters.AddWithValue("@Registree_Index", Registree_Index);
                cmd.Parameters.AddWithValue("@UIDindex", dateAndGuid);
                cmd.Parameters.AddWithValue("@Submission_Number", 1);

                cmd.ExecuteNonQuery();
            }
        }

    }