【发布时间】:2020-07-08 02:28:52
【问题描述】:
我正在使用 ASP.NET 和 SQL Server 并在 Visual Studio 中构建整个项目。如果不清楚我正在尝试使用用户用户名所在的随机生成的数字更新用户表,然后将日期、用户 ID 和 orderid 以及用户 ID 插入到 Orders 表中。
我看不出这有什么问题。我收到无法将空值放入非空列 (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 Server 存储过程:
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
编辑
收到反馈后,我测试了用户名是否在页面之间传递,并且传递为 2?我在这里做错了什么
传递用户名
Response.Redirect("AccessDatabase.aspx?Username=" + usertxt.Text);
检索用户名
string Name = Request.QueryString["Username"];
【问题讨论】:
-
您使用的是哪个 dbms? (该代码是特定于产品的。)
-
听起来您将
@Username传递为 null。这可以解释这种行为。希望这会有所帮助:)
标签: c# asp.net sql-server visual-studio