C# 无法连续插入数据库

C# 无法连续插入数据库,c#,asp.net,scope-identity,C#,Asp.net,Scope Identity,我正在尝试对两个不同的表连续执行两次SQL插入 第一个表插入工作正常。它使用SELECT SCOPE\u IDENTITY()提取索引号,然后将其存储在变量Registree\u index中。这样行 然后我尝试在第二个表中插入Registree\u Index和一些其他变量。这根本不会写入第二个表。也没有错误消息 起初我认为这个错误与重用旧的查询和连接字符串变量有关,所以我创建了新的变量。这没有帮助 有人对此有想法吗?代码如下 private void WriteToDatabase() {

我正在尝试对两个不同的表连续执行两次SQL插入

第一个表插入工作正常。它使用
SELECT SCOPE\u IDENTITY()
提取索引号,然后将其存储在变量
Registree\u index
中。这样行

然后我尝试在第二个表中插入
Registree\u Index
和一些其他变量。这根本不会写入第二个表。也没有错误消息

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

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

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.ExecuteScalar()

这是因为您从未执行
cmd2
。由于
insertQuery2
仅插入到
event\u registration
表中,因此可以通过调用
cmd2.ExecuteNonQuery()
执行
cmd2

在一个旁注中,您应该考虑在执行查询之后确保<>代码>连接和连接2>代码>被关闭。下面是修改后的代码


这是因为您从未执行过
cmd2
。由于
insertQuery2
仅插入到
event\u registration
表中,因此可以通过调用
cmd2.ExecuteNonQuery()
执行
cmd2

在一个旁注中,您应该考虑在执行查询之后确保<>代码>连接和连接2>代码>被关闭。下面是修改后的代码

这个怎么样

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();
            }
        }

    }
这个怎么样

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();
            }
        }

    }


您没有执行第二个sql插入
cmd.ExecuteScalar
。此外,考虑在代码中使用<代码>使用语句,不必担心<代码>关闭< /代码>连接。好的建议。谢谢您没有执行第二个sql插入
cmd.ExecuteScalar
。此外,考虑在代码中使用<代码>使用语句,不必担心<代码>关闭< /代码>连接。好的建议。谢谢我只使用ExecuteScalar一次来获取registrees表中的初始索引。然后,我将该数字放入变量Registree\u索引中,然后将其插入另一个表event\u registation中。不需要在第二个表上使用ExecuteScalar;使用
ExecuteScalar
可以指示程序对数据库运行命令;否则它将永远不会执行该命令,而这正是您所经历的。好吧,我不明白ExecuteScalar是如何写入数据库的。刚刚找到了它的代码作为获取索引的手段。我的错误。我只使用ExecuteScalar一次来获取registrees表中的初始索引。然后,我将该数字放入变量Registree\u索引中,然后将其插入另一个表event\u registation中。不需要在第二个表上使用ExecuteScalar;使用
ExecuteScalar
可以指示程序对数据库运行命令;否则它将永远不会执行该命令,而这正是您所经历的。好吧,我不明白ExecuteScalar是如何写入数据库的。刚刚找到了它的代码作为获取索引的手段。我的错误。太好了,那很好!非常感谢你!我仍然不明白的是,我以前的代码是如何写入第一个表的。我没有为此使用ExecuteOnQuery,但它仍然会写入表。Nevermind。由于ExecuteScalar,它写入了第一个表。明白了,太好了,效果很好!非常感谢你!我仍然不明白的是,我以前的代码是如何写入第一个表的。我没有为此使用ExecuteOnQuery,但它仍然会写入表。Nevermind。由于ExecuteScalar,它写入了第一个表。明白了,我要给更多的桌子写信。命令、插入等是否有不同的变量是不必要的?我将编写更多的表。命令、插入等是否不需要使用不同的变量?