Member 12982429 Ответов: 2

Я хочу обновить оставшиеся дни ... строка за строкой .. Не все сразу .


. пожалуйста, посмотрите мой код ниже и прокомментируйте часть кода для этого оператора обновления ..
<pre lang="c#">private void button3_Click(object sender, EventArgs e)
        {

            myconnection.Open();
            displayData();
            string selectSql = "select * from employTable2";
            SqlCommand com = new SqlCommand(selectSql, myconnection);
           using (SqlDataReader read = com.ExecuteReader())
            {
                while (read.Read())
                {
                    string first1 = read["salarydate"].ToString();
                    string Second1 = read["expiredate"].ToString();
                     TimeSpan t1 = Convert.ToDateTime(Second1) - DateTime.Now;
                    int daysleft = t1.Days;
                    SqlConnection myconnection1 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\muhammad\my documents\visual studio 2010\Projects\ProjectClock\ProjectClock\ClockDB.mdf;Integrated Security=True;User Instance=True;");
                    myconnection1.Open();
                    SqlCommand cmd1 = new SqlCommand("UPDATE employTable2 SET daysleft='" + daysleft.ToString() + "'", myconnection1);
                   
                    cmd1.ExecuteNonQuery();
                    myconnection1.Close();
                  MessageBox.Show(t1.Days +"", "Days Left");
                }
                myconnection.Close();

            } 
        }


Что я уже пробовал:

я попытался обновить столбец leftdays в таблице DB .. но его обновления все сразу .. с последним значением, которое проходит через цикл datareader .. я хочу обновить его ряд за рядом .. как я могу это сделать, пожалуйста, помогите ... прокомментируйте мне код для этой части ..

2 Ответов

Рейтинг:
2

Peter Leow

За что? Почему вы хотите хранить значение, которое меняется каждый день и может быть легко выведено из некоторых констант, таких как expiredate? Это как возраст человека, вам просто нужно запомнить дату его рождения, чтобы узнать его возраст в любое время, не так ли?


Рейтинг:
2

Michael_Davies

Питер Леоу прав, однако если вы хотите сделать это строка за строкой, вам нужно будет добавить оператор WHERE в команду UPDATE, чтобы обновить только ту запись, которую вы только что прочитали.

Вы также можете использовать SqlConnection .Клонирование чтобы скопировать настройки подключения, а не повторять строку подключения, вам все равно придется открывать и закрывать клон, так как он копирует только настройки из источника.

SqlConnection myconnection1 = myconnection.Clone()


У вас все еще есть myconnection.close внутри using с .open вне using, однажды вы будете пытаться отладить кусок кода, задаваясь вопросом, почему он терпит неудачу, когда все выглядит правильно, сохраняя совпадающие строки кода на одном уровне, что помогает предотвратить будущие ошибки.