[ad_1]
SQLサーバーではなくC#とAccessデータベースでこのクエリを作成するにはどうすればよいですか
つまり、Max 関数を使用して null 値を 1 に置き換える方法
C#
public Int64 GetAccCode(Int64 Result,FRMAccounts xx) { DataTable dt = new DataTable(); dt.Clear(); SqlDataAdapter da = new SqlDataAdapter(); da = new SqlDataAdapter("select isnull(MAX( AccCode),1) from Accounts where AccParent = " + Result + " ", ConClass.con); da.Fill(dt); Int64 MyNewID; MyNewID = Convert.ToInt64(dt.Rows[0][0]); if (xx.AccType.SelectedIndex == 0) { if (MyNewID ==1) { MyNewID = int.Parse(Result.ToString() + "0".ToString() + 1); } else { MyNewID = (Convert.ToInt64(dt.Rows[0][0]) + 1); } } else if (xx.AccType.SelectedIndex == 1) { if (MyNewID ==1) { MyNewID = int.Parse(Result.ToString() + "0".ToString() + "0".ToString() + "0".ToString() + 1); } else { MyNewID = (Convert.ToInt64(dt.Rows[0][0]) + 1); } } return MyNewID; da.Dispose(); dt.Dispose(); }
私が試したこと:
null値を1に置き換えようとします
最大機能で。
解決策 1
いくつかの問題があり、コードの潜在的な改善が必要です
1. SQL Injection Vulnerability:
このコードは、Result 変数を SQL クエリ文字列に直接連結するため、SQL インジェクションの脆弱性が発生する可能性があります。 これを防ぐには、パラメータ化されたクエリを使用する必要があります。
C#
da = new SqlDataAdapter("SELECT ISNULL(MAX(AccCode),1) FROM Accounts WHERE AccParent = @Result", ConClass.con); da.SelectCommand.Parameters.AddWithValue("@Result", Result);
Unused Code:
da.Dispose() 行と dt.Dispose() 行は return ステートメントの後であるため、実行されることはありません。 リソースを適切に破棄するには、using ステートメントを使用することをお勧めします。 コードの更新バージョンは次のとおりです。
C#
public Int64 GetAccCode(Int64 Result, FRMAccounts xx) { DataTable dt = new DataTable(); using (SqlDataAdapter da = new SqlDataAdapter("SELECT ISNULL(MAX(AccCode),1) FROM Accounts WHERE AccParent = @Result", ConClass.con)) { da.SelectCommand.Parameters.AddWithValue("@Result", Result); da.Fill(dt); } Int64 MyNewID = Convert.ToInt64(dt.Rows[0][0]); if (MyNewID == 1) { MyNewID = Int64.Parse($"{Result}{"0".PadLeft(xx.AccType.SelectedIndex * 2, '0')}1"); } else { MyNewID = MyNewID + 1; } return MyNewID; }
Access データベースでは、 NZ
この関数は通常、NULL 値を別の指定された値に置き換えるために使用されます。 さらに、Access は SQL Server のような名前付きパラメーターをサポートしていないため、? を使用する必要があります。 クエリ内のパラメーターのプレースホルダーとして使用します。 Access データベースのコードを変更する方法は次のとおりです。
C#
public Int64 GetAccCode(Int64 Result, FRMAccounts xx) { DataTable dt = new DataTable(); using (OleDbDataAdapter da = new OleDbDataAdapter("SELECT NZ(MAX(AccCode), 1) FROM Accounts WHERE AccParent = ?", ConClass.con)) { da.SelectCommand.Parameters.AddWithValue("@Result", Result); da.Fill(dt); } // Rest of your code }
[ad_2]
コメント