TSQL: обновление нескольких столбцов не работает ??(ASP.NET C #) - PullRequest
0 голосов
/ 02 сентября 2011

У меня есть эта хранимая процедура

CREATE PROCEDURE spEditInfo
@username nvarchar(64),
@password nvarchar(64),
@firstname nvarchar(64),
@middlename nvarchar(64),
@lastname nvarchar(64),
@email nvarchar(64) AS
UPDATE Users
SET password=@password,
firstname=@firstname,
middlename=@middlename,
lastname=@lastname,
email=@email
WHERE username=@username;

Но проблема в этом.Независимо от того, какие значения я добавлю в качестве оставшихся параметров, будет изменен только пароль.Есть идеи, почему?

Вот мой код вызова:

    SqlCommand cmd = new SqlCommand("spEditInfo", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("username", SqlDbType.NVarChar, 64);
    cmd.Parameters.Add("password", SqlDbType.NVarChar, 64);
    cmd.Parameters.Add("firstname", SqlDbType.NVarChar, 64);
    cmd.Parameters.Add("middlename", SqlDbType.NVarChar, 64);
    cmd.Parameters.Add("lastname", SqlDbType.NVarChar, 64);
    cmd.Parameters.Add("email", SqlDbType.NVarChar, 64);
    cmd.Parameters["username"].Value = Username.Text;
    cmd.Parameters["password"].Value = Password.Text;
    cmd.Parameters["firstname"].Value = FirstName.Text;
    cmd.Parameters["middlename"].Value = MiddleName.Text;
    cmd.Parameters["lastname"].Value = LastName.Text;
    cmd.Parameters["email"].Value = Email.Text;

    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();

РЕДАКТИРОВАТЬ: Хорошо, я признаю, что я тратил время, глядя на неправильный конец.У меня есть значения для элементов управления, инициализированных во время page_load.Он перезаписывает все изменения, кроме пароля, который я не показываю.

Любые предложения о том, как улучшить это ??Я хочу, чтобы зафиксированные данные отображались в форме.

РЕДАКТИРОВАТЬ: вернуться к квадрату 1. Кажется, что данные идеально передаются в SP, потому что у меня есть SP теперь сделать небольшую запись параметров вTXT-файл снаружи.Однако кажется, что значения не обновляются при вызове моей страницей ASP.NET.Это необычно, так как при ручном выполнении SP работает, но не при вызове через мой код.

Ответы [ 4 ]

1 голос
/ 02 сентября 2011

Я бы запустил Profiler и посмотрел, действительно ли ожидаемые значения отправляются в proc.

1 голос
/ 02 сентября 2011

Попробуйте

cmd.Parameters.AddWithValue("username", Username.Text);

Вместо использования cmd.Parameters.Add это должно работать для вас и сделать его немного чище. Надеюсь, это поможет вам

0 голосов
/ 02 сентября 2011

Честно говоря, я бы предложил использовать что-то вроде Enterprise Library и Data Application Block, если вы можете. Это действительно облегчает жизнь. Мои 2 цента.

-Shaun

0 голосов
/ 02 сентября 2011

Вы забыли @ в названии параметра:

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