2013-11-04 24 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!"; 
相關問題