Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/12: Рейтинг темы: голосов - 12, средняя оценка - 4.50
Urik_
0 / 0 / 0
Регистрация: 14.04.2012
Сообщений: 43
1

Как в поле ID одной таблицы записать значение поля ID другой таблицы

14.04.2012, 18:11. Просмотров 2193. Ответов 11
Метки нет (Все метки)

В БД две таблицы:

1)USERS с полями ID_User, Name, Password. В нее записываются пользователи после регистр-ии.

2)SALES с полями ID_Sales, Date, Value_Sales и ID_User. В нее записываются данные после того как в корзине нажата кнопка - заказать.

Вот код:

C#
1
2
3
4
5
6
7
 SqlCommand cmd = new SqlCommand("sp_InsertSales", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@Date", SqlDbType.DateTime, 0, "Date_Sales").Value = DateTime.Now;
                cmd.Parameters.Add("@Value", SqlDbType.Decimal, 18, "Value_Sales").Value = GetDataSetCar().Tables[0].Rows[0]["TOTAL"];
                cmd.Parameters.Add("@UserID", SqlDbType.Int, 0, "ID_User").Value = Convert.ToInt32(2);
                con.Open();
                int aKey = Convert.ToInt32(cmd.ExecuteScalar());
Вопрос: как сделать, чтобы в таблицу SALES поле ID_User записывалось из поля ID_User таблицы USERS?!?!?

А именно что надо сделать с этой строкой -
C#
1
cmd.Parameters.Add("@UserID", SqlDbType.Int, 0, "ID_User").Value = Convert.ToInt32(2);
?!?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2012, 18:11
Ответы с готовыми решениями:

Как сортировать записи одной таблицы по результатам другой?
У меня есть две таблицы 'Персоны' и 'Фото'. Таблицы связаны между собой 'Персоны.АйДи' ко множеству...

Замена значений в поле одной таблицы на значение из другой таблицы
Добрый всем день,прошу помощи,так как не силён в программировании, суть вот в чём: есть программка...

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

Как записать две строки поля одной таблицы в одну строку другой?
Есть такой запрос к БД и результат этого запроса две строки ROH и KOR поля FIL С 6 строки...

Запрос для вставки данных из поля одной таблицы в поле другой
Подскажите, как с помощью запроса вставить данные из поля Код_квитанции таблицы Квитанции в таблицу...

11
sau
2358 / 1824 / 326
Регистрация: 22.07.2011
Сообщений: 7,001
Завершенные тесты: 1
14.04.2012, 21:28 2
Ну очевидно идентификатор текущего пользователя, а где его взять зависит от того как пользователь идентифицируется в системе ).
А вообще с подобным проектом новичку не справиться.
2
Alligieri
CEO
Эксперт С++
2255 / 1245 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
14.04.2012, 21:55 3

Не по теме:

sau, они просто ожидают что это как в ПэХаПэ - нагуглил решение, вставил на сайт - заработал на колу



Urik_, на ваши вопросы нереально дать ответ - даже если б хотелось. Увы, у нас экстрасенсы сейчас в отпуске.
0
Urik_
0 / 0 / 0
Регистрация: 14.04.2012
Сообщений: 43
14.04.2012, 22:04  [ТС] 4
Прошу вас быть более снисходительными к человеческой глупости=)

Пользователь регистрируется через элемент Login. Данные записываются в таблицу USERS.

Вот код:
C#
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
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
        {
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
            string aSQL = "select ID_USER, NAME_USER, PASSWORD from [USER] where UPPER(NAME_USER) =@USER and Password = @PASS";
 
            try
            {
                SqlCommand cmd = new SqlCommand(aSQL, con);
                cmd.Parameters.Add("@USER", SqlDbType.VarChar, 10, "NAME_SER").Value = Login1.UserName.ToUpper();
                cmd.Parameters.Add("@PASS", SqlDbType.Char, 10, "PASSWORD").Value = Login1.Password.ToUpper();
                con.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                dr.Read();
                if (dr.HasRows)
                {
                    Session["user"] = dr["ID_USER"];
                    Response.Redirect("car.aspx?ID=" + Request.QueryString["ID"] + "&quant" + Request.QueryString["quant"]);
                }
                else
                {
                    Response.Write("Имя пользователя или пароль неверны!!");
                }
            }
            finally
            {
                con.Close();
            }
 
 
        }
Вот весь код моей корзины

C#
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
public DataSet GetDataSetCar()
        {
            if (Session["car"] == null)
            {
                DataSet ds = new DataSet();
                DataColumn colID = new DataColumn("ID_PRODUCT", System.Type.GetType("System.Int32"), "");
                DataTable dt = new DataTable("CAR");
                dt.Columns.Add(colID);
                dt.Columns.Add("NAME_PRODUCT", System.Type.GetType("System.String"), "");
                dt.Columns.Add("QUANTITY", System.Type.GetType("System.Int32"), "");
                dt.Columns.Add("VALUE", System.Type.GetType("System.Double"), "");
                dt.Columns.Add("SUBTOTAL", System.Type.GetType("System.Double"), "QUANTITY*VALUE");
                dt.Columns.Add("TOTAL", System.Type.GetType("System.Double"), "SUM(SUBTOTAL)");
                dt.Columns.Add("User_ID", System.Type.GetType("System.Int32"), "");
 
                DataColumn[] keys = new DataColumn[1];
                keys[0] = colID;
                dt.PrimaryKey = keys;
                ds.Tables.Add(dt);
                Session["car"] = ds;
                return ds;
            }
            else
            {
                return (Session["car"] as DataSet);
            }
 
        }
 
        private void Add(int quantity)
        {
 
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
            string aSQL = "select NAME_PRODUCT, VALUE_PRODUCT from PRODUCT where ID_PRODUCT =" + Request.QueryString["ID"].ToString();
            try
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(aSQL, con);
                SqlDataReader reader = cmd.ExecuteReader();
                reader.Read();
 
                DataTable dt = GetDataSetCar().Tables[0];
 
                DataRow row = dt.Rows.Find(Request.QueryString["ID"]);
 
 
                if (row == null)
                {
                    row = dt.NewRow();
                    row["ID_PRODUCT"] = Request.QueryString["ID"];
                    row["NAME_PRODUCT"] = reader["NAME_PRODUCT"];
                    row["QUANTITY"] = quantity;
                    row["VALUE"] = reader["VALUE_PRODUCT"];
                    dt.Rows.Add(row);
                }
                else
                {
                    int qtd = Convert.ToInt32(row["QUANTITY"]);
                    qtd = qtd + quantity;
                    row["QUANTITY"] = qtd;
                }
 
            }
            finally
            {
                con.Close();
            }
 
        }
   
        private void Remove(int aId)
        {
            DataSet ds = GetDataSetCar();
            DataRow row = ds.Tables[0].Rows.Find(aId);
            if (row != null)
            {
                ds.Tables[0].Rows.Remove(row);
                ds.AcceptChanges();
                GridView1.DataSource = GetDataSetCar();
                GridView1.DataBind();
            }
 
        }
 
        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            Remove(Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value));
        }
 
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Footer)
            {
                e.Row.Cells[3].Text = "Total: ";
                e.Row.Cells[4].Text = String.Format("{0:c}", GetDataSetCar().Tables[0].Rows[0]["TOTAL"]);
            }
        }
        private void Finish()
        {
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
            try
            {
                SqlCommand cmd = new SqlCommand("sp_InsertSales", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@Date", SqlDbType.DateTime, 0, "Date_Sales").Value = DateTime.Now;
                cmd.Parameters.Add("@Value", SqlDbType.Decimal, 18, "Value_Sales").Value = GetDataSetCar().Tables[0].Rows[0]["TOTAL"];
                cmd.Parameters.Add("@UserID", SqlDbType.Int, 0, "ID_User").Value = Convert.ToInt32(2);
                con.Open();
                int aKey = Convert.ToInt32(cmd.ExecuteScalar());
                foreach (DataRow row in GetDataSetCar().Tables[0].Rows)
                {
                    SqlCommand cmdIten = new SqlCommand("sp_InsertItensSales", con);
                    cmdIten.CommandType = CommandType.StoredProcedure;
                    cmdIten.Parameters.Add("@IDSales", SqlDbType.Int, 0, "ID_Sales").Value = aKey;
                    cmdIten.Parameters.Add("@IDProduct", SqlDbType.Int, 0, "ID_Product").Value = row["ID_PRODUCT"];
                    cmdIten.Parameters.Add("@ValueProduct", SqlDbType.Decimal, 18, "Value_product").Value = row["VALUE"];
                    cmdIten.Parameters.Add("@Quantity", SqlDbType.Int, 0, "Quantity").Value = row["QUANTITY"];
                    cmdIten.ExecuteNonQuery();
                }
 
                Session["TOTAL"] = GetDataSetCar().Tables[0].Rows[0]["TOTAL"];
                Session["car"] = null;
               
            }
            finally
            {
                con.Close();
            }
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            Finish();
        }
0
14.04.2012, 22:04
ansi_str
56 / 56 / 15
Регистрация: 22.09.2011
Сообщений: 319
14.04.2012, 22:06 5
То есть нужно занести ID текущего пользователя, который сделал покупку в базу(в таблицу Sales)?

Если так - то получаем Id пользователя и заносим как параметр:

C#
1
cmd.Parameters.Add("@UserID", SqlDbType.Int, 0, "ID_User").Value = Convert.ToInt32(Membership.GetUser(this.Page.User.Identity.Name).ProviderUserKey)
1
Urik_
0 / 0 / 0
Регистрация: 14.04.2012
Сообщений: 43
14.04.2012, 22:11  [ТС] 6
Дааа, мне надо, чтобы в SALES заносилось ID текущего пользователя.

А у меня в это поле все время заносится число 2 - из за этой строки соответственно:

C#
1
2
3
    
 
cmd.Parameters.Add("@UserID", SqlDbType.Int, 0, "ID_User").Value = Convert.ToInt32(2);
0
ansi_str
56 / 56 / 15
Регистрация: 22.09.2011
Сообщений: 319
14.04.2012, 22:14 7
Цитата Сообщение от Urik_ Посмотреть сообщение
Дааа, мне надо, чтобы в SALES заносилось ID текущего пользователя.

А у меня в это поле все время заносится число 2 - из за этой строки соответственно:

C#
1
2
3
    
 
cmd.Parameters.Add("@UserID", SqlDbType.Int, 0, "ID_User").Value = Convert.ToInt32(2);
Как то так:
C#
1
cmd.Parameters.Add("@UserID", SqlDbType.Int, 0, "ID_User").Value = Convert.ToInt32(Membership.GetUser(this.Page.User.Identity.Name).ProviderUserKey)
1
Urik_
0 / 0 / 0
Регистрация: 14.04.2012
Сообщений: 43
14.04.2012, 22:22  [ТС] 8
Мне вывелось сообщение "Ссылка на объект не указывает на экземпляр объекта."

как это можно определить раньше?
0
ansi_str
56 / 56 / 15
Регистрация: 22.09.2011
Сообщений: 319
14.04.2012, 22:49 9
Пользователь анонимный - то есть он не вошёл в систему и может сделать заказ?
Или ссылки на обьект нет у зарегестрированного пользоватлея, который делает заказ?
1
Urik_
0 / 0 / 0
Регистрация: 14.04.2012
Сообщений: 43
14.04.2012, 22:54  [ТС] 10
Второй вариант)

где указать ссылку на объект зарегистр. польз-лю?
0
sau
2358 / 1824 / 326
Регистрация: 22.07.2011
Сообщений: 7,001
Завершенные тесты: 1
15.04.2012, 03:14 11
Ид. пользователя у вас сохраняется в сессию
C#
1
Session["user"] = dr["ID_USER"];
решение в вашем случае:
C#
1
cmd.Parameters.Add("@UserID", SqlDbType.Int, 0, "ID_User").Value = Session["user"];
1
Urik_
0 / 0 / 0
Регистрация: 14.04.2012
Сообщений: 43
15.04.2012, 13:16  [ТС] 12
Урааа!! Заработало=)

Огромное вам спасибо)
0
15.04.2012, 13:16
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 13:16

Сложный запрос? Поля из одной таблицы, и поля из другой таблицы, но...
Вот так мы делаем выборку из основной таблицы table1: SELECT t1.ID, t1.f2, t1.f3 FROM table1 t1...

Переместить два столбца одной таблицы со строкой в поле другой таблицы
Доброго времени суток, добрый форумчанин. Возникла проблема следующего плана: Есть две таблицы:...

Нужно чтоб в ComboBox от одной таблицы отображались значения из соответствующего поля другой таблицы
Нужно чтоб в combobox от одной таблицы отображались значения из соответствующего поля другой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.