编辑:我收到我的连接已经关闭的错误
我刚刚开始使用一些数据库和连接。我不完全了解他们是如何工作的,并写出了绝对的怪物。如果有人能解决此代码,我将不胜感激,因为我不知道该怎么办。谢谢。 PS。变量显示我有多接近失去理智 PPS。我试图使代码看起来更好,但堆栈溢出只是不允许我
povezava = new SqlConnection(izdvor);
povezava.Open();
SqlTransaction mTrans = povezava.BeginTransaction();
poizvedba = new SqlCommand("SELECT COUNT(id) FROM Tekme", povezava);
poizvedba.Transaction = mTrans;
int Tekma = (int)poizvedba.ExecuteScalar();
poizvedba.CommandType = CommandType.Text;
poizvedba.ExecuteNonQuery();
mTrans.Commit();
povezava.Close();
for (int i = 0; i < Tekma; i++)
{
if (i < Tekma)
{
string dab1 = @"Data Source=dd\sqlexpress;Initial catalog=Grubelnik2_3DR;user ID=arduino;Password=arduino";
lol1 = new SqlConnection(dab1);
povezava.Open();
SqlTransaction fTrans = lol1.BeginTransaction();
test1 = new SqlCommand("SELECT Datum FROM Tekme WHERE id = " + i + "", lol1);
test1.Transaction = mTrans;
string Datum = test1.ExecuteScalar().ToString();
string Datum1 = DateTime.Now.ToString("M/d/yyyy");
int a = i;
test1.CommandType = CommandType.Text;
test1.ExecuteNonQuery();
fTrans.Commit();
lol1.Close();
if (DateTime.Parse(Datum) <= DateTime.Parse(Datum1))
{
string dab2 = @"Data Source=dd\sqlexpress;Initial catalog=Grubelnik2_3DR;user ID=arduino;Password=arduino";
lol2 = new SqlConnection(dab2);
povezava.Open();
SqlTransaction kTrans = lol2.BeginTransaction();
test2 = new SqlCommand("SELECT Ura FROM Tekme WHERE id = " + i + "", lol2);
test2.Transaction = mTrans;
int Ura = (int)test2.ExecuteScalar();
DateTime dt = DateTime.Now;
int hour = dt.Hour;
test2.CommandType = CommandType.Text;
test2.ExecuteNonQuery();
kTrans.Commit();
lol2.Close();
if (Ura < hour)
{
string dab3 = @"Data Source=dd\sqlexpress;Initial catalog=Grubelnik2_3DR;user ID=arduino;Password=arduino";
lol3 = new SqlConnection(dab3);
povezava.Open();
SqlTransaction yTrans = lol3.BeginTransaction();
test3 = new SqlCommand("SELECT Minuta FROM Tekme WHERE id = " + i + "", lol3);
test3.Transaction = mTrans;
int Minuta = (int)test3.ExecuteScalar();
DateTime ft = DateTime.Now;
int minute = ft.Minute;
test3.CommandType = CommandType.Text;
test3.ExecuteNonQuery();
yTrans.Commit();
lol3.Close();
if (Minuta < minute)
{
string dab4 = @"Data Source=dd\sqlexpress;Initial catalog=Grubelnik2_3DR;user ID=arduino;Password=arduino";
lol4 = new SqlConnection(dab4);
povezava.Open();
SqlTransaction xTrans = povezava.BeginTransaction();
test4 = new SqlCommand("UPDATE Uporabniki SET idPaketa = @Kdaj WHERE id = " + i + "", povezava);
test4.Transaction = mTrans;
test4.Parameters.Add(new SqlParameter("@Kdaj", "Prihodnost"));
test4.CommandType = CommandType.Text;
test4.ExecuteNonQuery();
xTrans.Commit();
lol4.Close();
a = 0;
}
答案 0 :(得分:1)
据我所知,当您相信自己的意思时,您会继续打开与povenza
的{{1}}连接:
povezava.Open();
因为您是在没有实际打开连接的情况下开始事务的。
此外,通常也不建议在一个循环中打开和关闭数据库连接,因为这会很快失去控制并影响数据库性能。最好事先合并或事后处理,并在可能的情况下执行单个操作。