2011-12-27 14 views
1

私のasp.netアプリケーションのデータベースを更新したいと思います。更新されたフィールドはテキストボックスに設定されます。テーブルのSQL Serverフィールドが空である可能性があります

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = con; 

cmd.ExecuteNonQuery(); 
cmd.CommandText = "update dbo.User_Info SET [email protected], [email protected],[email protected],[email protected],[email protected],[email protected] where UserName [email protected]"; 
cmd.Parameters.Add("FirstName", SqlDbType.VarChar).Value = TextFirstName.Text; 
cmd.Parameters.Add("LastName", SqlDbType.VarChar).Value = TextLastName.Text; 
cmd.Parameters.Add("Degree", SqlDbType.VarChar).Value = TextDegree.Text; 
cmd.Parameters.Add("Organization", SqlDbType.VarChar).Value = TextOrg.Text; 
cmd.Parameters.Add("Phone", SqlDbType.VarChar).Value = TextPhone.Text; 
cmd.Parameters.Add("Ext", SqlDbType.VarChar).Value = TextExt.Text; 

しかし、多分私はそれらを一切更新したくありません。空白のままにしておくだけで、コードを変更する方法は?例えば、ちょうどので、コマンドは次のようになり、「学位」を更新したい私は姓を更新するには、コマンドが

cmd.CommandText = "update dbo.User_Info SET [email protected] where UserName [email protected]"; 

しかし、別の男であるべきと仮定 を:

cmd.CommandText = "update dbo.User_Info SET [email protected] where UserName [email protected]"; 

することはありますさまざまなシナリオを考慮する普遍的なコマンドですか?

答えて

2

ユニバーサル?疑わしい。いくつかのオプション:

動的にフィールドを追加することにより、入力に基づいて、あなたのUPDATEステートメントをカスタマイズします。

string sql = "update dbo.User_Info SET "; 
if (TextFirstName.Text != null) 
{ 
    sql += "[email protected], "; 
    cmd.Parameters.Add("FirstName", SqlDbType.VarChar).Value = TextFirstName.Text; 
} 
// etc. 

はNULL paramteresをチェックし、それらがNULLの場合は初期値のままにして、あなたのSQLステートメントを変更します。

// If @FirstName is NULL, "update" with the original value 
cmd.CommandText = "update dbo.User_Info SET FirstName=COALESCE(@FirstName, FirstName)," 
// etc. 
0

コントロールの内容に応じて更新クエリを作成する必要がありますか?あなたはそれらを反復処理し、この(粗製の例は以下の)のように、彼らは、空でない場合にのみ、それらを使用することができます。そのような

string query = "UPDATE User_Info SET "; 
foreach (Control ctl in panel.Controls) 
{ 
    if (ctl.Type == "Textbox") 
    { 
     query += ctl.Tag + " = " + "@" + ctl.Tag //assuming you preload the table names on the tags of the controls and you wanna name the parameters like that 
     cmd.Parameters.AddWithValue("@" + ctl.Tag, ctl.Text); 
     query += ", " 
    } 
} 
//You need here something to eliminate the last comma 
query += "WHERE UserName [email protected]" 
cmd.Parameters.AddWithValue("@username", _usrName); 

何かが仕事ができます。もちろん、反復処理の代わりに、常にスイッチ文を使用することができます。

+1

'Control'には' Type'プロパティがありません。 'typeof(TextBox).Equals(ctl.GetType())'を実行することができます – Amy

+0

クエリに関係のない他のテキストボックスがある場合は、よく見えますか?どのように私はそれらと区別することができますか? –

+0

タグを設定しないでください。それは素早く汚れています(維持することは非常に難しいとは言えませんが)。また、犬夜叉は言った。 – CMPerez

関連する問題