Я работаю с ASP. NET и SQL Сервером и собираю весь проект в Visual Studio. Если неясно, я пытаюсь обновить таблицу пользователей случайно сгенерированным числом, в котором присутствует имя пользователя user, затем вставить дату, usersid и orderid и userid в таблицу Orders
.
Я не вижу в этом сразу ничего плохого. Я получаю сообщение об ошибке, что значения NULL не могут быть помещены в ненулевой столбец (id
), однако, похоже, что они вообще не обращаются к таблице пользователей. Он не сохраняет текущий заказ у пользователей, но генерирует orderId
и размещает его в заказах вместе с датой.
Я подумал, может быть, хранимые процедуры могут обращаться только к одной таблице за раз, или мне нужно где-то указать, к каким таблицам мне нужно получить доступ. Что-то в строке подключения?
Asp. net:
public partial class PlaceOrder : System.Web.UI.Page
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["YIKESConnectionString"].ConnectionString);
protected void Page_Load(object sender, EventArgs e)
{
string Name = Request.QueryString["Username"]; // retrieving username from the login page
DateTime now = DateTime.Now; // getting current date
SqlCommand cmd = new SqlCommand("dbo.CreateOrder", con);
con.Open();
cmd.Parameters.Add("@Username", SqlDbType.VarChar).Value = Name;
cmd.Parameters.Add("@DateOrdered", SqlDbType.Date).Value = now;
cmd.Parameters.Add("@retord", System.Data.SqlDbType.Int).Direction = System.Data.ParameterDirection.ReturnValue;//return parameter
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery(); // isn't accessing users at all, try one procedure for users one of orders
con.Close();
int orderid = (int)cmd.Parameters["@retord"].Value;
}
}
SQL Хранимая процедура на сервере:
CREATE PROCEDURE [dbo].[CreateOrder]
@DateOrdered date,
@Username varchar(16)
AS
DECLARE @CurrentOrder int
DECLARE @retord int
SELECT @CurrentOrder = FLOOR(RAND() * (10000 - 0 + 1) + 0);
UPDATE Users
SET Users.CurrentOrder = @CurrentOrder
WHERE Users.Username = @Username;
INSERT INTO Orders(Orders.Id)
SELECT Users.Id
FROM Users
WHERE Users.Username = @Username;
INSERT INTO Orders(OrderId, DateOrdered)
VALUES (@CurrentOrder, @DateOrdered);
SELECT @retord = @CurrentOrder
RETURN @retord
EDIT
После обратной связи я проверил, передается ли имя пользователя между страницами и передается ли оно как 2? что я тут делаю не так
Передача имени пользователя
Response.Redirect("AccessDatabase.aspx?Username=" + usertxt.Text);
Получение имени пользователя
string Name = Request.QueryString["Username"];