2013-11-04 5 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

당신은 AddSqlParameter을 추가 내 스크립트입니다. 대신 AddWithValue를 사용하여 모든

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

여기에 '추가'에는 아무런 문제가 없습니다. http://msdn.microsoft.com/en-us/library/9dd8zze1(v=vs.110).aspx; 'Add'는 잘 작동합니다 *. * [* 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의 일부 버전은 가능하지만 SqlConnection을 통해 SQL Server에 접근 할 수 없습니다 –

+0

그럼에도 불구하고 params 앞에 @를 추가하면이 경우에 도움이됩니다 ... –

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

두 번째 SqlCommand를위한 새로운 SQLConnection을 열려고을 .

+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!"; 
관련 문제