到目前为止,这是我的代码:
protected void Button2_Click(object sender, EventArgs e)
{
using (SqlConnection scn = new SqlConnection("Data Source = 'PAULO'; Initial Catalog=ShoppingCartDB;Integrated Security =True"))
{
scn.Open();
SqlCommand cmd = new SqlCommand(@"UPDATE UserData SET CreditRequest =
CAST(REPLACE(CreditRequest, ',', '') as int)
FROM CreditRequests Where Username=@Username;
SELECT CreditRequest FROM UserData
WHERE Username=@Username", scn);
cmd.Parameters.Add("@Username", SqlDbType.NVarChar).Value = Session["New"];
object value = cmd.ExecuteScalar();
if (value != null)
txtCredit.Text = value.ToString();
}
}
}
但是,当我查看数据库时,信用请求值正在被插入到数据库中并生成新的 ID,并且所有内容都是NULL
。
示例
ID NULL Username NULL Email NULL Contact NULL Creditrequest 5,000
有没有办法将信用请求值插入到正确的用户名中。我的代码中缺少什么?
另外,我希望信用请求值显示在我的文本框中,并且我相信是这行代码?
if (value != null)
txtCredit.Text = value.ToString();
最佳答案
您正在调用添加新记录的 INSERT 语句。不,在末尾添加 WHERE 子句不会转换更新语句中的插入语句。
如果您想更新现有记录,则调用
SqlCommand cmd = new SqlCommand(@"UPDATE UserData SET CreditRequest =
(SELECT CAST(REPLACE(c.CreditRequest, ',', '') as int)
FROM CreditRequests c Where c.Username=@Username)", scn);
对于问题的第二部分,在此上下文中不可能获取 ExecuteScalar 的返回值,因为 UPDATE 不会选择任何要返回的记录。如果您想取回该值,您可以同时发出两个语句,并用分号将它们分隔开:
SqlCommand cmd = new SqlCommand(@"UPDATE UserData SET CreditRequest =
(SELECT CAST(REPLACE(c.CreditRequest, ',', '') as int)
FROM CreditRequests c Where c.Username=@Username);
SELECT CreditRequest FROM UserData u
WHERE u.Username=@Username", scn);
两条语句都将被执行,但 ExecuteScalar 将能够返回更新的 CreditRequest
关于c# - 数据库中的值在文本框中不可见,请将值插入到正确的用户名中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37547381/