C# 无法连续插入数据库
我正在尝试对两个不同的表连续执行两次SQL插入 第一个表插入工作正常。它使用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() {
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
在一个旁注中,您应该考虑在执行查询之后确保<>代码>连接和
这是因为您从未执行过
cmd2
。由于insertQuery2
仅插入到event\u registration
表中,因此可以通过调用cmd2.ExecuteNonQuery()
执行cmd2
在一个旁注中,您应该考虑在执行查询之后确保<>代码>连接和
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,它写入了第一个表。明白了,我要给更多的桌子写信。命令、插入等是否有不同的变量是不必要的?我将编写更多的表。命令、插入等是否不需要使用不同的变量?