C#を使用してSQLデータベースをフィルタリングして、windowsFormsHostに表示する必要があります。C#listviewでSQLデータベースと表示を検索する方法
そのために、必要な文字列を入力するテキストボックスを作成しました。この入力を使用して、コードはテキストを使用してデータベースを検索し、更新ボタンをクリックして表示します。
リフレッシュボタンが機能して完了しました。フィルタに応じて選択した行のリストを作成するだけで済みます。ここで
は何も値が返されないと述べているコードは、次のとおりです。
private string GetPassengerList(string sPasssenger)
{
string sPasssengerL = textBoxPassengerName.Text;
if (sPasssenger.Trim().Length > 0)
{
string sToTime = dtpToDate.Value.Year.ToString("D4") + @"/" + dtpToDate.Value.Month.ToString("D2") + @"/" + dtpToDate.Value.Day.ToString("D2");
sToTime += @" " + dtpToTime.Value.Hour.ToString("D2") + @":" + dtpToTime.Value.Minute.ToString("D2") + @":" + dtpToTime.Value.Second.ToString("D2");
string sFromTime = dtpFromDate.Value.Year.ToString("D4") + @"/" + dtpFromDate.Value.Month.ToString("D2") + @"/" + dtpFromDate.Value.Day.ToString("D2");
sFromTime += @" " + dtpFromTime.Value.Hour.ToString("D2") + @":" + dtpFromTime.Value.Minute.ToString("D2") + @":" + dtpFromTime.Value.Second.ToString("D2");
string sSqlSelect = @"SELECT Passenger FROM ";
string sSqlWhere = @" WHERE (Created BETWEEN '" + sFromTime + @"' AND '" + sToTime + @"')";// and (IATA='" + sIata + @"')";
string sSqlLike = @" LIKE '%" + sPasssengerL + "'%";
SqlDataReader sqlReader = null;
try {
SqlCommand sqlCommand = new SqlCommand(sSqlSelect + @"dbo.BagData" + sSqlWhere + sSqlLike, this.dbConnection);
sqlReader = sqlCommand.ExecuteReader();
if(!sqlReader.Read()) {
sqlReader.Close();
sqlCommand.CommandText = sSqlSelect + @"dbo.BagDataHistory" + sSqlWhere + sSqlLike;
sqlReader = sqlCommand.ExecuteReader();
if(!sqlReader.Read()) {
sqlReader.Close();
sqlCommand.CommandText = sSqlSelect + @"dbo.BagDataArchive" + sSqlWhere + sSqlLike;
sqlReader = sqlCommand.ExecuteReader();
if(!sqlReader.Read()) {
sqlReader.Close();
}
}
}
if(!sqlReader.IsClosed) {
sPasssengerL = this.GetSqlDataString(@"Passenger", sqlReader);
sqlReader.Close();
}
}
catch(SqlException x) {
MessageBox.Show(@"GetPassengerName(): SQL Exception: " + x.Message, this.GetHashString("Error"), MessageBoxButton.OK, MessageBoxImage.Error);
}
catch(Exception ex) {
MessageBox.Show(@"GetPassengerName(): General Exception: " + ex.Message, this.GetHashString("Error"), MessageBoxButton.OK, MessageBoxImage.Error);
}
finally {
if(sqlReader != null) {
if(!sqlReader.IsClosed) {
sqlReader.Close();
}
}
}
return sPasssengerL;
}
}
一方ではなく、パラメータを使用する必要があります。文字列を連結してクエリを構成することは、セキュリティ上問題ありません。例えば'select * from @tableName where @Foo = @ Bar'そして' sqlCommand.Parameters.AddWithValue( "@ tableName"、 "yourTableName"); ' – Stuart
' sSqlWhere'はどこに定義されていますか? –
@TimothyG。 sSqlWhereは私のコードで定義されていますが、意図的に省略しましたが、私の懸念はsSqlLikeの上にあります –