2011-08-14 20 views
0

この特定の問題を解決した回避策が見つかりました。データベースのデータが1つのコントロールセットにロードされ、更新情報が別のコントロールセットにenetredされます。コメントありがとうございます。アプリケーションが動作しています。データベースを更新していないC#で更新コマンド

データベース行を更新しようとしています。私はいくつかのfora /ウェブサイトで見つけたものに基づいて次のコードを書いた。彼はデータベースを更新していません。

 UpdateCmd.Parameters["@editFirstName"] = "George"; 

に私も

UpdateCmd.Parameters["@editFirstName"] = "'" + editFirstNameContent.Text + "'"; 
をしようとしたとして@editFirstNameの値は、リテラルである場合は、データベースが正しく更新されます:私は、次を発見した、このエラーを修正するために何かをしようとした後

これは動作しませんでした。

string firstNameValue = editFirstNameContent.Text; 
    UpdateCmd.Parameters["@editFirstName"] = firstNameValue; 

動作しませんでした:

は、私はまた、変数にTextBoxのデータを入れて、変数を使用しようとしました。

したがって、UPDATEコマンドは明らかにデータバインドを更新しています。しかし、明らかにParameters.Value行はTextBoxのデータを読み取っていないため、変更された値で更新されていません。

protected void editCustomerButton_Click(object Sender, EventArgs e) 
{ 
    string connString = WebConfigurationManager.ConnectionStrings["proofreadThePlanetConnectionString"].ConnectionString; 
    using (SqlConnection connection = new SqlConnection(connString)) 
    { 
     connection.Open(); 
     string updateString = "UPDATE tblCustomerInfo SET [email protected], [email protected], [email protected], [email protected] WHERE customerID=" + Request.QueryString["EID"]; 
     SqlCommand UpdateCmd = new SqlCommand(updateString, connection); 
     UpdateCmd.Parameters.Add("@editCustomerID", SqlDbType.Int); 
     UpdateCmd.Parameters["@editCustomerID"].Value = editCustomerIDContent.Text; 
     UpdateCmd.Parameters.Add("@editFirstName", SqlDbType.VarChar, 25); 
     UpdateCmd.Parameters["@editFirstName"].Value = editFirstNameContent.Text; 
     UpdateCmd.Parameters.Add("@editLastName", SqlDbType.VarChar, 50); 
     UpdateCmd.Parameters["@editLastName"].Value = editLastNameContent.Text; 
     UpdateCmd.Parameters.Add("@editEmail", SqlDbType.VarChar, 75); 
     UpdateCmd.Parameters["@editEmail"].Value = editEmailContent.Text; 
     UpdateCmd.ExecuteNonQuery(); 
    } 
} 
+6

これらのパラメータをすべて使用しても、最後にコマンドにコンカチメントが残っているのはなぜですか? –

+0

Parameters.Add経由で更新された値を追加すると、SQLインジェクションを避けるために、QueryStringパラメーターをParameters.Addで渡す必要があります。おそらくあなたのPKであるcustomerIDを更新しますか? – devio

+0

エラーが表示されますか? 'try {...} catch(例外ex)を入れてみてください...'それをブロックする - 例外はありますか?どのデータ型が 'customerID'ですか??それが文字列でなければならない場合は、一重引用符を置く必要があります。 **パラメータを使用してください** ** –

答えて

2

私はMS SQL Serverが自動コミットをどのように処理するかわからないんだけど、場合に自動コミットモードをがオンにされていない、手動で(UpdateCmd.Transaction.Commitを)あなたのトランザクションをコミットする必要があります。

+1

いいえ - 明示的なトランザクションがないので、UPDATE文は暗黙のトランザクションで実行され、最後にコミットします... –

+0

これを行うかどうか?もしそうなら、私はこれをどのようにするのですか?グリッドビューなどにバインドされたsqldatasourceを使用していないのでMSDNのすべての例は役に立ちません。 –

+0

UPDATEステートメントが暗黙的に実行されている場合、情報が更新されないのはなぜですか? –

0

SQLプロファイラには、SQL Management Studioが付属しています。コードを実行している間にこれを実行すると、実際に実行されているコマンドを確認できます。

ここでは、プロファイラの使用方法に関するチュートリアルです。

http://sqlserverpedia.com/wiki/Using_SQL_Server_Profiler

0

私はこれを実行するためのステートメントが、更新すべきデータを引き起こす可能性があるので、あなたがしている場合

Request.QueryString["EID"]

は確かに、正しいのcustomerId値を含まないことを確認します存在しない行を更新しようとしています。

パラメータ値が正しく設定されていることを確認するには、次の形式を試してください。

command.Parameters.Add("@editCustomerID", SqlDbType.Int).Value = editCustomerIDContent.Text;

アッシュによって示唆されるように、コマンドが実行されている間に、起こっている正確に何を見つけるための最善の方法は、注意してください(データベースに対してプロファイラを実行するために、次のようになります。これは、パフォーマンスへの影響を持つことができるとする必要がありますテスト/開発システムまたは時間外で実行)

関連する問題