带参数的更新命令不会更新数据表

时间:2014-10-18 01:35:12

标签: c# sql sql-server tsql ado.net

整晚我尝试了很多方法但是带参数的sql Update命令没有更新数据表。我完全消失了。执行成功并返回1行影响但旧数据未被替换。请帮帮我。

conn.Open();
string updateSql = "UPDATE tbl_cust SET fname=@fname, lname=@lname WHERE email=@email";  
SqlCommand UpdateCmd = new SqlCommand(updateSql, conn);

UpdateCmd.Parameters.Add("@fname", SqlDbType.NVarChar, 50, "fname");
UpdateCmd.Parameters.Add("@lname", SqlDbType.NVarChar, 50, "lname");
UpdateCmd.Parameters.Add("@email", SqlDbType.NVarChar, 50, "email");

UpdateCmd.Parameters["@fname"].Value = txtFirstName.Text;
UpdateCmd.Parameters["@lname"].Value = txtLastName.Text;
UpdateCmd.Parameters["@email"].Value = Session["sesEmail"].ToString();         
UpdateCmd.ExecuteNonQuery(); 

另一种方法:(同样的结果)

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Hib"].ConnectionString);
string upData = "UPDATE tbl_cust SET fname=@fname, lname=@lname, addrs=@address WHERE email=@email";

SqlCommand cmd = new SqlCommand(upData, conn);
conn.Open();

cmd.Parameters.AddWithValue("@fname", fName);
cmd.Parameters.AddWithValue("@lname", lName);
cmd.Parameters.AddWithValue("@addrs", address);
cmd.Parameters.AddWithValue("@email", Session["sesEmail"].ToString());

int n = cmd.ExecuteNonQuery();
Response.Write("<script>alert('rows affected = " + n + "');</script>");
Response.Write("<script>alert('sesEmail = " + Session["sesEmail"].ToString() + "');</script>");

2 个答案:

答案 0 :(得分:0)

我会通过创建一个接受参数的存储过程来调试它,然后我将从SSMS(SQL Server Management Studio)手动运行该过程。在给定正确的参数的情况下确认过程本身是可行的,然后从前端调用过程而不是内联SQL(无论如何这是一种更好的方法)。

CREATE PROCEDURE usp_UpdateCustTable
@fname varchar(50),
@lname varchar (50),
@email varchar(50) 

AS

--EXEC usp_UpdateCustTable 'Joe', 'Blow', 'joe.blow@acmecompany.com'


UPDATE tbl_cust SET fname=@fname, lname=@lname WHERE email=@email

创建proc后,运行示例的注释掉的EXEC部分。一旦您知道该过程正在运行,该问题只能归结为Session变量为空,无效的连接字符串或一些相关问题。您是否设置了断点并监控代码?

让我知道;我感觉到你的痛苦,: - )

答案 1 :(得分:0)

魔术就是......问题解决了。谢谢大家。你们都非常乐于助人。这是我在这里的第一篇文章,我很高兴看到专家组的迅速回复。再次感谢。

if (!IsPostBack)
{

}