обновить таблицу sql server поля могут быть пустыми - PullRequest
1 голос
/ 27 декабря 2011

Я хочу обновить базу данных в моем приложении asp.net. Обновленные поля устанавливаются в текстовых полях.

SqlCommand cmd = new SqlCommand();
cmd.Connection = con;

cmd.ExecuteNonQuery();
cmd.CommandText = "update dbo.User_Info SET FirstName=@FirstName, LastName=@LastName,Degree=@Degree,Organization=@Organization,Phone=@Phone,Ext=@Ext where UserName =@username";
cmd.Parameters.Add("FirstName", SqlDbType.VarChar).Value = TextFirstName.Text;
 cmd.Parameters.Add("LastName", SqlDbType.VarChar).Value = TextLastName.Text;
 cmd.Parameters.Add("Degree", SqlDbType.VarChar).Value = TextDegree.Text;
 cmd.Parameters.Add("Organization", SqlDbType.VarChar).Value = TextOrg.Text;
 cmd.Parameters.Add("Phone", SqlDbType.VarChar).Value = TextPhone.Text;
 cmd.Parameters.Add("Ext", SqlDbType.VarChar).Value = TextExt.Text;

Однако, возможно, некоторые поля я вообще не хочу обновлять. Просто оставьте их пустыми, так как изменить код? Например, предположим, что я просто хочу обновить FirstName, команда должна быть

cmd.CommandText = "update dbo.User_Info SET FirstName=@FirstName where UserName =@username";

Однако другой парень просто хочет обновить «Степень», поэтому команда будет:

cmd.CommandText = "update dbo.User_Info SET Degree=@Degree where UserName =@username";

Существует ли универсальная команда для рассмотрения различных сценариев?

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Универсальный?Я сомневаюсь.Некоторые параметры:

Настройте операторы UPDATE на основе входных данных, динамически добавляя поля:

string sql = "update dbo.User_Info SET ";
if (TextFirstName.Text != null)
{
    sql += "FirstName=@FirstName, ";
    cmd.Parameters.Add("FirstName", SqlDbType.VarChar).Value = TextFirstName.Text;
}
// etc.

Измените оператор SQL, чтобы проверять параметры NULL, и оставляйте исходные значения, если они равны NULL:

// If @FirstName is NULL, "update" with the original value
cmd.CommandText = "update dbo.User_Info SET FirstName=COALESCE(@FirstName, FirstName)," 
// etc. 
0 голосов
/ 27 декабря 2011

Вам нужно построить свой запрос на обновление в зависимости от содержимого элементов управления? Вы можете выполнять их итерацию и использовать их, только если они не пусты, как показано ниже (пример грубый):

string query = "UPDATE User_Info SET ";
foreach (Control ctl in panel.Controls)
{
    if (ctl.Type == "Textbox")
    {
        query += ctl.Tag + " = " + "@" + ctl.Tag //assuming you preload the table names on the tags of the controls and you wanna name the parameters like that
        cmd.Parameters.AddWithValue("@" + ctl.Tag, ctl.Text);
        query += ", "
    }
 }
 //You need here something to eliminate the last comma
 query += "WHERE UserName =@username"
 cmd.Parameters.AddWithValue("@username", _usrName);

Нечто подобное может сработать. Конечно, вместо итерации вы всегда можете использовать предложение переключателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...