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

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

14.04.2012, 18:11. Просмотров 3174. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2012, 18:11
Ответы с готовыми решениями:

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

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

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

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

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы С#-разработчиков‌
11
2427 / 1880 / 340
Регистрация: 22.07.2011
Сообщений: 7,197
14.04.2012, 21:28 2
Ну очевидно идентификатор текущего пользователя, а где его взять зависит от того как пользователь идентифицируется в системе ).
А вообще с подобным проектом новичку не справиться.
2
CEO
Эксперт С++
2256 / 1246 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
14.04.2012, 21:55 3

Не по теме:

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



Urik_, на ваши вопросы нереально дать ответ - даже если б хотелось. Увы, у нас экстрасенсы сейчас в отпуске.
0
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
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
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
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
0 / 0 / 0
Регистрация: 14.04.2012
Сообщений: 43
14.04.2012, 22:22  [ТС] 8
Мне вывелось сообщение "Ссылка на объект не указывает на экземпляр объекта."

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

где указать ссылку на объект зарегистр. польз-лю?
0
2427 / 1880 / 340
Регистрация: 22.07.2011
Сообщений: 7,197
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
0 / 0 / 0
Регистрация: 14.04.2012
Сообщений: 43
15.04.2012, 13:16  [ТС] 12
Урааа!! Заработало=)

Огромное вам спасибо)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2012, 13:16

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

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

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

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

Изменение поля таблицы на поле из другой таблицы
Есть 2 таблицы: product и prod_type В первой хранятся продукты, во второй типы продуктов В первой...


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

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

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