36

SqlDataAdapterでParameters.AddWithValueを使用するにはどうすればよいですか。以下の検索コード。

var da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE '%"+txtSearch.Text+"%'", _mssqlCon.connection);
var dt = new DataTable();
da.Fill(dt);

私はこのようにコードを書き直しました:

SqlDataAdapter da;
da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE '%@search%'", _mssqlCon.connection);
da.SelectCommand.Parameters.AddWithValue("@search",txtSearch.Text);
var dt = new DataTable();
da.Fill(dt);

しかし、失敗しました。

4

4 に答える 4

82

SqlDataAdapterの初期化に使用される文字列は、SqlDataAdapterCommandTextSelectCommandプロパティの になります。
このコードを使用して、そのコマンドにパラメーターを追加できます

da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search",
                        _mssqlCon.connection);
da.SelectCommand.Parameters.AddWithValue("@search","%" + txtSearch.Text + "%");
  • まず、パラメーター プレースホルダーを囲む一重引用符を削除します。
  • 次に、ワイルドカード文字を AddWithValue の Value パラメータに直接追加します。

AddWithValueを使用するように依頼されましたが、これは便利なショートカットですが、多くの欠点もあり、すべて十分に文書化されていることを覚えておいてください。

したがって、 AddWithValueを使用せず、オブジェクトおよびコレクションの初期化子構文を使用する同じコードは、次のように記述できます。

da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search",
                        _mssqlCon.connection);
da.SelectCommand.Parameters.Add(new SqlParameter
{
    ParameterName = "@search",
    Value = "%" + txtSearch.Text + "%",
    SqlDbType = SqlDbType.NVarChar,
    Size = 2000  // Assuming a 2000 char size of the field annotation (-1 for MAX)
});

そして、上記のさらに単純化されたワンライナーバージョンは次のとおりです。

da.SelectCommand.Parameters.Add("@search",SqlDbType.NVarChar,2000).Value = "%" + txtSearch.Text + "%";
于 2012-11-07T19:20:11.203 に答える
4

da.SelectCommand.Parameters.Add()の代わりに使用cmd.Parameters.Add()します。これは、2 つのパラメーターを取り、2 つ目のパラメーターが null 許容の int パラメーターであるストアド プロシージャを処理するためのサンプルです。

public DataTable GetData(int par1, int? par2)
{
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        using (SqlDataAdapter da = new SqlDataAdapter())
        {
            string sql = "StoredProcedure_name";
            da.SelectCommand = new SqlCommand(sql, conn);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;

            da.SelectCommand.Parameters.Add("@Par1", SqlDbType.Int).Value = par1;
            da.SelectCommand.Parameters.Add("@Par2", SqlDbType.Int).Value = (object)par2?? DBNull.Value;

            DataSet ds = new DataSet();
            da.Fill(ds, "SourceTable_Name");

            DataTable dt = ds.Tables["SourceTable_Name"];

            //foreach (DataRow row in dt.Rows)
            //{
            //You can even manipulate your data here
            //}
            return dt;
        }
    }
}
于 2018-07-25T08:01:34.007 に答える
0

これを試して:

mySearchString = "Select * From test Where ([title] LIKE '%' + @title + '%')";
cmd.Parameters.Add("@title", SqlDbType.VarChar, 120);
cmd.Parameters("@title").Value = TextBox1.Text;
于 2015-12-03T06:47:09.577 に答える