一つには、この方法を必要以上に複雑にしています。一体どのように 1 つのテーブルに 96 列あるのかはわかりませんが、必要な 45 列を選択するには、select ステートメントで 45 列を入力するだけです。
これは、SQL がどのように見えるかのサンプルです。当然のことながら、45 列を入力するつもりはありませんが、アイデアはわかります。
SELECT FirstName, LastName, Age, [keep going to 45] FROM tblUsers
私が対処したいもう 1 つの問題は、SQL ステートメントの実行方法です。文字列変数を 1 つの SQL 文字列に連結しないでください。少なくともパラメーター化されたクエリを使用していることを確認してください。しかし、Entity Framework や LINQ to SQL についても検討することをお勧めします。
SqlCommand scomm = new SqlCommand("UPDATE tblUsers SET FirstName='" + firstName + "' WHERE UserID='" + userId + "'");
それ ^^^ は非常に悪いです。ユーザーが卑劣なことをして自分の名前を名乗ったらどうなるか考えてみてくださいHarry' AND Admin='true
。「まあ、firstName = firstName.Replace("'","''");
すべての変数を処理するだけです。そんなことをしたら、個人的にあなたを殴ります。次のようにクエリをパラメータ化します。
SqlCommand scomm = new SqlCommand("UPDATE tblUsers SET FirstName=@FirstName WHERE UserID=@UserID");
scomm.Parameters.Add(new SqlParameter("FirstName", firstName));
scomm.Parameters.Add(new SqlParameter("UserID", userId));
その ^^^ ははるかに優れています。
編集また、テーブルの怪物を作り直す機会があれば、フィールドのサブセットを独自のエンティティ (テーブル) にリファクタリングし、参照 ID を介してそれらをリンクしてみてください。たとえば、[tlbUsers] というテーブルがあり、特定のユーザーに関する情報が含まれているとします。このような:
[tlbUsers]
UserID
FirstName
LastName
Age
Username
StreetAddress
City
State
ZipCode
Country
Phone
関連する値が独自のテーブルを持つようにリファクタリングすることを検討してください。このユーザー テーブルからすべてのアドレス情報を取得し、tlbAddresses という名前のテーブルに配置できます。これにより、データを取り込む際の処理が容易になるだけでなく、データベースのスペースを節約できる可能性があります。たとえば、Harry と Sally が同じ家に住んでいる場合、同じ住所レコードを参照できます。
[tlbUsers]
FirstName
LastName
Age
Username
AddressID
Phone
[tlbAddresses]
AddressID
Street
City
State
ZipCode
Country