接続しているデータベースには、全文検索インデックスを持つテーブルがあります。これは正しく機能します。
select * from MyTable where contains(*, 'value')
WPFでは、その正確なコマンドを送信すると機能します。ただしvalue
、ハードコーディングされていないため、ユーザーが入力するものであるため、SQLインジェクションから保護する必要があります。問題は、そうしても結果が返されないことです。これが私のコードです。
DataTable dt = new DataTable();
string ConString = "Data Source=127.0.0.1,1433;Initial Catalog=MyDB;User Id=sa;Password=amazingSecurePassword;";
using (SqlConnection con = new SqlConnection(ConString))
{
string sqlCMD = "select * from MyTable where contains(*, @s1)"
SqlCommand cmd = new SqlCommand(sqlCMD, con);
SqlDataAdapter da = new SqlDataAdapter();
try
{
con.Open();
cmd = new SqlCommand(sqlCMD, con);
cmd.Parameters.Add(new SqlParameter("@s1", "value"));
da.SelectCommand = cmd;
da.Fill(dt);
con.Close();
}
catch (Exception x)
{
//Error logic
}
finally
{
cmd.Dispose();
con.Close();
}
}
編集:@Mikeコメントが機能しました。SqlDbType.NVarCharを変更すると、問題が修正されました
上記のコメントで述べたSQlDbType
ようNVarChar
に、の作成中にをに設定するとSqlParameter
、CLRが適切なデータ型を決定するのに役立ちます。MSDNのSqlParameterコンストラクターに関する詳細情報。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加