2013-11-04 23 views
1

我在执行c#中的update语句时遇到了一些问题。好吧,如果我写的查询字符串的一些具体数值就像C#参数在查询字符串中不起作用

string querystr = "UPDATE Users SET User_FirstName='My Firstname', User_LastName='My Lastname' WHERE User_Username='username'"; 

但是,当我使用parameter.Add在查询字符串来写,这是行不通的。所以我有一些麻烦,是如何让参数在我的查询字符串中工作。

这里是我的脚本到目前为止

SqlConnection connection = new SqlConnection("Data Source=localhost;Initial Catalog=Break; Integrated Security=True"); 
SqlCommand command = new SqlCommand("SELECT * FROM Users", connection); 
command.Connection.Open(); 

string querystr = "UPDATE Users SET User_FirstName = @FirstName, User_LastName= @LastName WHERE User_Username = @Username"; 
SqlCommand query = new SqlCommand(querystr, connection); 

string User_Username = Session["Username"].ToString(); 
string User_FirstName = FirstNameEdit.Text; 
string User_LastName = LastNameEdit.Text; 

query.Parameters.Add("@Username", User_Username); 
query.Parameters.Add("@FirstName", User_FirstName); 
query.Parameters.Add("@LastName", User_LastName); 

query.ExecuteNonQuery(); 

Session.Add("FirstName", User_FirstName); 
Session.Add("LastName", User_LastName); 

StatusMessage.Text = "Updated!"; 

command.Connection.Close(); 
+6

您收到任何错误或异常消息?给我们更多关于你的问题的细节。 –

+2

请定义“它没有工作”吗?究竟发生了什么? –

+0

请检查'User_Username','User_FirstName'和'User_LastName'的确切值,包括任何前导/尾随空格,并包括* case *;取决于数据库配置,“Kvist”不一定匹配“kvist”,“KVIST”或“KvIsT”。有时它会 - 但是 - 依赖于配置。特别是,如果其中任何一个都是'null',事情会变得非常有趣(但是:'.Text'通常不会返回'null',所以这不太可能成为问题) –

回答

2

您与Add加入SqlParameter。使用AddWithValue代替:

所有的
query.Parameters.AddwithValue("@Username", User_Username); 
+0

“Add”这里没有错:http://msdn.microsoft.com/en-us/library/9dd8zze1(v=vs.110).aspx; '添加'工程*很好*。有*首选*的方法(因此'[Obsolete]'' - 但它从根本上*工程*。具体来说,这个重载被删除,以避免歧义,只不过是:“Add的重载,需要一个字符串和一个对象被弃用,因为SqlParameterCollection.Add重载可能含糊不清,它使用一个String和一个SqlDbType枚举值来传递一个整数...“ –

+0

我试过了,它没有工作 – Kvist

1

第一次尝试以相同的顺序来定义就像你在你的字符串定义它们的参数。 以前我遇到过这个问题,但是我不得不说我此时使用了ADO Connection。 但它可能是一个尝试。 也许这些参数不会被它们的名称在内部引用。

(但我希望这不是问题但愿这已得到修复。)

像这样:

SqlConnection connection = new SqlConnection("Data Source=localhost;Initial Catalog=Break; Integrated Security=True"); 
SqlCommand command = new SqlCommand("SELECT * FROM Users", connection); 
command.Connection.Open(); 

string querystr = "UPDATE Users SET User_FirstName = @FirstName, User_LastName= @LastName WHERE User_Username = @Username"; 
SqlCommand query = new SqlCommand(querystr, connection); 

string User_Username = Session["Username"].ToString(); 
string User_FirstName = FirstNameEdit.Text; 
string User_LastName = LastNameEdit.Text; 

// changed the order of adding values here 
query.Parameters.Add("@FirstName", User_FirstName); 
query.Parameters.Add("@LastName", User_LastName); 
query.Parameters.Add("@Username", User_Username); 

query.ExecuteNonQuery(); 

Session.Add("FirstName", User_FirstName); 
Session.Add("LastName", User_LastName); 

StatusMessage.Text = "Updated!"; 

command.Connection.Close(); 
+0

位置参数适用于某些ADO .NET提供,并可能SQL CE的一些版本,但通过'SQL Server不SqlConnection' –

+0

在PARAMS前尽管如此添加@在这种情况下可以帮助... –

0
SqlCommand query = new SqlCommand(querystr, connection); 
query.CommandType = CommandType.Text //try to add this line. 

,并试图打开一个新的SqlConnection第二的SqlCommand 。

+0

不,这么想的工作。 – Kvist

+0

'Text'是默认 –

0

尝试隔离更新查询并添加SqlParameters的新实例。同时检查User_Username变量是否获取数据库中存在的值。

string User_Username = Session["Username"].ToString(); 
string User_FirstName = FirstNameEdit.Text; 
string User_LastName = LastNameEdit.Text; 

string cnnStr = "Data Source=localhost;Initial Catalog=Break; Integrated Security=True"; 

using (SqlConnection connection = new SqlConnection(cnnStr)) 
{ 
    //Commented as not using 
    //SqlCommand command = new SqlCommand("SELECT * FROM Users", connection); 
    //command.Connection.Open(); 

    string querystr = "UPDATE Users SET User_FirstName = @FirstName, User_LastName= @LastName " + 
        "WHERE User_Username = @Username"; 
    SqlCommand query = new SqlCommand(querystr, connection); 

    //Add a new SqlParameter()... 
    query.Parameters.Add(new SqlParameter("@Username", SqlDbType.NVarChar)).Value = User_Username; 
    query.Parameters.Add(new SqlParameter("@Firstname", SqlDbType.NVarChar)).Value = User_FirstName; 
    query.Parameters.Add(new SqlParameter("@LastName", SqlDbType.NVarChar)).Value = User_LastName; 

    connection.Open(); 
    query.ExecuteNonQuery(); 
} 

//Rest of the code 
Session.Add("FirstName", User_FirstName); 
Session.Add("LastName", User_LastName); 
StatusMessage.Text = "Updated!"; 
相关问题