我编写了一个存储过程来更新PAID
中的tblUser
列,并且该存储过程完美无缺,
代码:
@buyer_email varchar(50),
@payment bit
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
update tblUser set paid=@payment where email = @buyer_email
END
但是当我从我的asp.net应用程序调用它时,它不会更新Paid
列,即使我在我的asp.net代码中尝试简单的更新语句但是也没有更新列
String userEmail_send = (Convert.ToString(Request.QueryString["emailAdmin"]));
String conString = "Data Source=COSANOSTRA; MultipleActiveResultSets=true; Initial Catalog=Waleed_orsfinal;Integrated Security=True";
try
{
con.Open();
if (userEmail_get.Replace("'", string.Empty) == userEmail_send.Replace("''", string.Empty))
{
//String query1 = "update tblUser Set paid=1 where email='" + userEmail_send + "' ";
SqlCommand sqlcom1 = new SqlCommand("submitPaypalPayment", con);
sqlcom1.CommandType = CommandType.StoredProcedure;
sqlcom1.Parameters.Add("@buyer_email", SqlDbType.VarChar).Value = userEmail_send;
sqlcom1.Parameters.Add("@payment", SqlDbType.Bit).Value= 1 ;
sqlcom1.ExecuteScalar();
hdr_msg_success.InnerText = "Congrats, You have paid successfully. Wait for an approval by an admin ";
Response.Write("<br/>"+" "+ "Matched=" +userEmail_send.Replace("''","'"));
}
else
{
hdr_msg_success.InnerText = "Something went wrong in matching Emails , Please confirm your Email";
}
}
catch (Exception exc)
{
Response.Write(exc.Message);
}
finally
{
con.Close();
}
答案 0 :(得分:1)
失败可能是由于您的connectionstring安全上下文造成的。 假设您在IIS下运行当前Web用户的模拟不是默认行为。
通过在您的连接字符串中指定Integrated Security=True
,您告诉SQL Server接受当前Windows上下文作为尝试访问数据库的用户。在IIS下运行时,这将是IIS应用程序池帐户,而不是您自己的帐户。
尝试创建SQL Server用户名和密码,并在connectionstring中指定它们,而不是使用Web应用程序的集成安全性。您也可以设置应用程序池Windows身份,但维护和迁移通常更麻烦......还有允许Web用户模拟的选项,但这样做更加笨拙。
顺便说一下,还有其他一些事情要考虑......
考虑在您的用例中使用ADO.net中的存储过程进行交互。
using (SqlCommand sqlcom1 = new SqlCommand("dbo.submitPaypalPayment", con))
{
sqlcom1.CommandType = CommandType.StoredProcedure;
sqlcom1.Parameters.Add("@buyer_email", SqlDbType.VarChar) { Value = userEmail_send };
sqlcom1.Parameters.Add("@payment", SqlDbType.Bit) { Value= 1 };
sqlcom1.ExecuteNonQuery();
}
答案 1 :(得分:0)
根据我在这里阅读的内容,我似乎没有正确设置Request对象中的变量值。
您是否尝试过设置断点并检查从此语句为userEmail_send变量设置的值
[String userEmail_send = (Convert.ToString(Request.QueryString["emailAdmin"]));
]
可能是它没有为该变量设置正确的值。
在此行sqlcom1.ExecuteScalar();
处设置断点并检查参数值。
您可以通过序号位置或参数名称来执行此操作,如下所示:
按顺序排名sqlcom1.Parameters[0].Value
或按名称sqlcom1.Parameters["@buyer_email"].Value
也为你的@payment参数做同样的事情。记住它的顺序位置是1。
希望,这有助于......祝你好运......