我想更改用户名。当前名称和新名称是文本框输入。在调试时,我得到了例外“ JOHN”在这种情况下无效。为什么会这样?它应该期望一个字符串并接收它。错误在哪里?
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;
namespace WebApplication1
{
public partial class Index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection();
con.ConnectionString = "...";
OleDbCommand changeFirstName = new OleDbCommand("UPDATE Usertable SET Name =" + @NewFN + " WHERE Name = " + @FN + "", con);
changeFirstName.Parameters.Add("@NewFN", OleDbType.VarChar).Value = getNewFirstName.Text;
changeFirstName.Parameters.Add("@FN", OleDbType.VarChar).Value = getFirstName.Text;
con.Open();
try
{
int i = changeFirstName.ExecuteNonQuery();
}
catch(Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
con.Close();
}
}
}
答案 0 :(得分:2)
参数标记是SQL的一部分,位于其中:
OleDbCommand changeFirstName = new OleDbCommand(
"UPDATE Usertable SET Name = @NewFN WHERE Name = @FN", con);
旁注:
IDisposable
,应使用using
SqlConnection
/ SqlCommand
所有3个组合的示例:
using(var con = new SqlConnection("..."))
{
con.Execute("UPDATE Usertable SET Name = @NewFN WHERE Name = @FN",
new {
NewFN = getNewFirstName.Text,
FN = getFirstName.Text,
});
}
答案 1 :(得分:1)
我现在明白了。因为它是OleDb,所以我不能在Command字符串中使用@。我必须使用?来代替@NewFN和@FN。在Parameter.Add上,我必须使用@Name为其提供值。这是一个示例:
OleDbCommand changeFirstName = new OleDbCommand (”UPDATE Usertable SET Name = ? WHERE Name = ?“);
changeFirstName.Parameters.Add(”@Name“, OleDbType.VarChar).Value = getNewFirstName.Text;