0

C# Windows フォームで SQL データ アダプターを使用しており、同じ文字列を使用してボタンを 1 回クリックするだけで、2 つの別々のデータベースで 2 つの更新ステートメントを実行しようとしています。例外エラーが発生し続け、2 番目の更新ステートメントが最初の更新ステートメントの接続を使用しようとしていると思いますが、それを理解できません。誰にもアイデアはありますか?

                string resendacct = textBox_resendVisit.Text.Trim();

                SqlConnection CONN1 = new SqlConnection("Data Source=DBSERVER1.domain.company.org; Initial Catalog=db1; User ID=username; Password=password    ;Trusted_Connection=False");

                //OPEN SQL CONNECTION
                CONN1.Open();

                //CREATE NEW SQLCOMMAND
                SqlCommand cmd = CONN1.CreateCommand();
                cmd.CommandText =
                 "UPDATE PRODUCTIONDB1.dbo.date_time  " +
                     "SET PRODUCTIONDB1.dbo.date_time.sent_datetime = null  " +
                 "FROM PRODUCTIONDB1.dbo.date_time  " +
                 "INNER JOIN PRODUCTIONDB1.dbo.useridentity  " +
                 "ON PRODUCTIONDB1.dbo.useridentity.custidentity = PRODUCTIONDB1.dbo.date_time.custidentity  " +
                 "WHERE PRODUCTIONDB1.dbo.useridentity.account = @resendtimes";
                cmd.Parameters.AddWithValue("@resendtimes", resendacct);
                cmd.ExecuteNonQuery();

                int noRows;

                noRows = cmd.ExecuteNonQuery();


                //THIS COMMAND RESENDS THE DATABASE2 REPORTS!//

                SqlConnection CONN2 = new SqlConnection("Data Source=DBSERV2.domain.company.org; Initial Catalog=db2; Integrated Security=TRUE");

                //OPEN SQL CONNECTION
                CONN2.Open();

                //CREATE NEW SQL COMMAND
                SqlCommand cmd1 = CONN2.CreateCommand();
                cmd.CommandText =
                    "UPDATE PRODUCTIONDB2.dbo.date_time  " +
                        "SET PRODUCTIONDB2.dbo.date_time.timedone = null  " +
                    "FROM PRODUCTIONDB2.dbo.date_time  " +
                    "INNER JOIN PRODUCTIONDB2.dbo.custidentity  " +
                    "ON PRODUCTIONDB2.dbo.custidentity.id = PRODUCTIONDB2.dbo.date_time.custencounter_id  " +
                    "INNER JOIN PRODUCTIONDB2.dbo.custencounter  " +
                    "ON PRODUCTIONDB2.dbo.custencounter.id = PRODUCTIONDB2.dbo.custidentity.custencounter_id  " +
                    "WHERE PRODUCTIONDB2.dbo.custencounter.accountnumber = @resendtimes";
                cmd.Parameters.AddWithValue("@resendtimes", resendacct);
                cmd.ExecuteNonQuery();

                int noRows1;

                noRows1 = cmd1.ExecuteNonQuery();
                //CLOSE SQLCONNECTIONS
                CONN1.Close();
                CONN2.Close();
4

2 に答える 2

1

2 番目のコマンドは、作成した最初のコマンド変数に割り当てられています。そのコマンドは最初の接続を使用しています。cmd と cmd1 を確認してください。2番目のSQLステートメントは、cmdではなくcmd1に割り当てる必要があると思います。

于 2013-08-19T17:17:44.503 に答える
1

以下であなたの答えを読むことができます。しかし、その前に、あなたの接続は次のようにする必要があると言わなければなりません

using(SqlConnection sqlConn = new SqlConnection())
{
   //your code here.
}

2番目のコマンドでは、すべての操作を実行していますが、 on にするcmd必要がありますcmd1。このようにコーディングする必要があります。

using (SqlConnection CONN1 = new SqlConnection("Data Source=DBSERVER1.domain.company.org; Initial Catalog=db1; User ID=username; Password=password    ;Trusted_Connection=False"))
        {
            //OPEN SQL CONNECTION
            CONN1.Open();

            //CREATE NEW SQLCOMMAND
            using (SqlCommand cmd = CONN1.CreateCommand())
            {
                cmd.CommandText =
                 "UPDATE PRODUCTIONDB1.dbo.date_time  " +
                     "SET PRODUCTIONDB1.dbo.date_time.sent_datetime = null  " +
                 "FROM PRODUCTIONDB1.dbo.date_time  " +
                 "INNER JOIN PRODUCTIONDB1.dbo.useridentity  " +
                 "ON PRODUCTIONDB1.dbo.useridentity.custidentity = PRODUCTIONDB1.dbo.date_time.custidentity  " +
                 "WHERE PRODUCTIONDB1.dbo.useridentity.account = @resendtimes";
                cmd.Parameters.AddWithValue("@resendtimes", resendacct);
                cmd.ExecuteNonQuery();

                int noRows;

                noRows = cmd.ExecuteNonQuery();
            }
        }

        //THIS COMMAND RESENDS THE DATABASE2 REPORTS!//

        using (SqlConnection CONN2 = new SqlConnection("Data Source=DBSERV2.domain.company.org; Initial Catalog=db2; Integrated Security=TRUE"))
        {
            //OPEN SQL CONNECTION
            CONN2.Open();

            //CREATE NEW SQL COMMAND
            using (SqlCommand cmd1 = CONN2.CreateCommand())
            {
                cmd1.CommandText =
                    "UPDATE PRODUCTIONDB2.dbo.date_time  " +
                        "SET PRODUCTIONDB2.dbo.date_time.timedone = null  " +
                    "FROM PRODUCTIONDB2.dbo.date_time  " +
                    "INNER JOIN PRODUCTIONDB2.dbo.custidentity  " +
                    "ON PRODUCTIONDB2.dbo.custidentity.id = PRODUCTIONDB2.dbo.date_time.custencounter_id  " +
                    "INNER JOIN PRODUCTIONDB2.dbo.custencounter  " +
                    "ON PRODUCTIONDB2.dbo.custencounter.id = PRODUCTIONDB2.dbo.custidentity.custencounter_id  " +
                    "WHERE PRODUCTIONDB2.dbo.custencounter.accountnumber = @resendtimes";
                cmd1.Parameters.AddWithValue("@resendtimes", resendacct);
                cmd1.ExecuteNonQuery();

                int noRows1;

                noRows1 = cmd1.ExecuteNonQuery();
            }
        }
于 2013-08-19T17:19:17.663 に答える