Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Передача параметров в ХП / 3 сообщений из 3, страница 1 из 1
17.06.2011, 11:41
    #37312519
Dezmond
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров в ХП
Помогите, чепуха какая-то получается, не знаю уж куда и копать.
Есть хранимка на MS SQL 2008, через веб-форму в неё передаются параметры. Запись вставляется, но все перепутано:
там, где должен быть пароль, там ФИО, там где логин - там пароль и т.д.
Прошерстил уже все, что можно.
Вот код, запускающий процедуру:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
public int InsertUser(UserInfo usin)
    {
        using (SqlConnection userconn = new SqlConnection(ConnectionString))
        {
            using (SqlCommand usercomm = new SqlCommand("dbo.InsertUser")) 
            {
                usercomm.CommandType = CommandType.StoredProcedure;
                SqlParameter parID = new SqlParameter("@UserID", SqlDbType.Int,  4 );
                parID.Direction = ParameterDirection.Output;
                SqlParameter parUser = new SqlParameter("@Username", SqlDbType.NVarChar,  50 );
                parUser.Value = usin.UserName_field;
                SqlParameter parPass = new SqlParameter("@Password", SqlDbType.NVarChar,  20 );
                parPass.Value = usin.Password_field;
                SqlParameter parFio = new SqlParameter("@Fio", SqlDbType.NVarChar,  150 );
                parFio.Value = usin.FIO_field;
                usercomm.Parameters.Add(parID);
                usercomm.Parameters.Add(parUser);
                usercomm.Parameters.Add(parPass);
                usercomm.Parameters.Add(parFio);
                try
                {
                    userconn.Open();
                    usercomm.Connection = userconn;
                    usercomm.ExecuteNonQuery();
                    return (int)usercomm.Parameters["@UserID"].Value;
                }
                catch (SqlException sqlerror)
                {

                    throw new ApplicationException("Ошибка соединения с базой!");
                }
                finally
                {
                    userconn.Close();
                }
        }   
      }
    }

Вот текст самой процедуры:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
ALTER PROCEDURE [dbo].[InsertUser]
@UserID int OUTPUT,
@Username varchar( 50 ),
@Password varchar( 20 ),
@Fio varchar( 150 )
AS
BEGIN
DECLARE @error int, @Guest bit
IF @Password IS NULL SET @Guest =  1  ELSE SET @Guest =  0 
INSERT INTO dbo.Users (UserName, Password, FIO, Guest) VALUES(@Username, @Password, @Fio, @Guest)
SET @error = @@ERROR
IF @error != 0  BEGIN
	IF @error =  515  RAISERROR ('Фамилия не может являться пустой. Проверьте правильность данных!',  1 ,  1 ) 
	ELSE RAISERROR ('Неизвестная ошибка, обратитесь к администратору!',  1 ,  1 )
						END
SET @UserID = @@IDENTITY
END

Ну, и на всякий случай, код где вводятся данные:
Код: plaintext
1.
2.
3.
4.
5.
6.
    Store_DB_Executor sde;
    ...
    protected void parsing(object Sender, EventArgs e)
    {
        UserInfo hypouser = new UserInfo(TextBox1.Text, TextBox2.Text, TextBox3.Text);
        sde.InsertUser(hypouser);
    }

И код класса юзера:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
public class UserInfo
{
    int UserID;
    string UserName, Password, FIO;
    DateTime RegistrationDate;
    bool Guest;

    public UserInfo(string UserName, string Password, string FIO)
	{
        this.UserName = UserName;
        this.Password = Password;
        this.FIO = FIO;
	}

    public int UserID_field
    {
        get { return UserID; }
        set { UserID = value; }
    }

    public string UserName_field
    {
        get { return UserName; }
        set { UserName = value; }
    }

    public string Password_field
    {
        get { return Password; }
        set { Password = value; }
    }

    public string FIO_field
    {
        get { return FIO; }
        set { FIO = value; }
    }

    public DateTime RegistrationDate_field
    {
        get { return RegistrationDate; }
        set { RegistrationDate = value; }
    }

    public bool Guest_field
    {
        get { return Guest; }
        set { Guest = value; }
    }
...
Рейтинг: 0 / 0
17.06.2011, 12:35
    #37312680
Barkan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров в ХП
Dezmond,

Вот на вскидку: имена TextBox1, TextBox2, TextBox3 вообще ничего не говорят.
Убедитесь сперва что они не перепутаны.
И именовать их надо как-то осмысленно!
...
Рейтинг: 0 / 0
17.06.2011, 12:48
    #37312709
Dezmond
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров в ХП
BarkanDezmond,

Вот на вскидку: имена TextBox1, TextBox2, TextBox3 вообще ничего не говорят.
Убедитесь сперва что они не перепутаны.
И именовать их надо как-то осмысленно!

Блин, посыпаю голову пеплом, переназвал контролы и проблема исчезла. Но ведь проверял это место 10 раз, ничего перепутано не было.
Я и типы менял, и параметры по-другому создавал, а причина-то на поверхности была...

Все, закрывайте тему.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Передача параметров в ХП / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]