3

Sql クエリや "like" でパラメーターを使用することに関する多くの質問を見てきましたが、コード化するためにあらゆる方法を試しましたが、クエリで結果を得ることができません。クエリ自体に値を入力すると、正常に実行されます。リストされた最初のクエリを実行すると、「スカラー変数 "@Search" を宣言する必要がありますが、cmd.Parameters.AddWithValue ステートメントでそれを行ったと思いました。誰かが私が間違っている可能性があることを確認できますか? .

            //Declare the connection object
        SqlConnection Conn = new SqlConnection();
        Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

        //Connect to the db
        Conn.Open();

        //Define query

        //This query doesn't work
        string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE '%' + @Search + '%')";

        //This query doesn't work either
        string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE State LIKE @Search";

        //This query works
        string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE State LIKE 'MI'";

        //Declare the Command
        SqlCommand cmd = new SqlCommand(sql, Conn);

        //Add the parameters needed for the SQL query
        cmd.Parameters.AddWithValue("@Search", "%" + txtSearch.Text + "%");           

        //Declare a SQL Adapter
        SqlDataAdapter da = new SqlDataAdapter(sql, Conn);

        //Declare a DataTable
        DataTable dt = new DataTable();

        //Populate the DataTable
        da.Fill(dt);

        //Bind the Listview
        lv.DataSource = dt;
        lv.DataBind();

        dt.Dispose();
        da.Dispose();
        Conn.Close();
4

5 に答える 5

7

上記のコードでは、SqlDataAdapter でパラメーターを使用していません。以下のコードでは、コマンドで SqlDataAdapter を使用します。

    //This query doesn't work
    string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE @Search)";

    //Declare the Command
    SqlCommand cmd = new SqlCommand(sql, Conn);

    //Add the parameters needed for the SQL query
    cmd.Parameters.AddWithValue("@Search", "%" + txtSearch.Text + "%"); 

  //Declare a SQL Adapter
    SqlDataAdapter da = new SqlDataAdapter();

    **sa.SelectCommand = cmd**

パラメータ化されたクエリを使用したくない場合は、これが機能します。

 //Declare the connection object
    //This query doesn't work
    string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE '%" + **txtSearch.Text** + "%')";

  //Declare a SQL Adapter
    SqlDataAdapter da = new SqlDataAdapter(sql, conn);
于 2012-12-01T20:22:40.673 に答える
5

あなたの主な問題は、このコンストラクターのために作成したコマンドを使用していないことです

SqlDataAdapter da = new SqlDataAdapter(sql, Conn);

したがって、パラメーターも使用しておらず、機能する唯一のクエリは、何も使用しないクエリ (3 番目のクエリ) です。代わりにこのコンストラクターを使用する必要があります (を使用して作成されたものSqlCommand)

SqlDataAdapter da = new SqlDataAdapter(cmd);

使用しているコンストラクターを変更すると、次のクエリのいずれかが適用されます。

string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE State LIKE @Search";
...
cmd.Parameters.AddWithValue("@Search", "%" + txtSearch.Text + "%");

またはこれ:

string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE State LIKE '%' + @Search + '%'";
...
cmd.Parameters.AddWithValue("@Search", txtSearch.Text);
于 2012-12-01T20:58:42.367 に答える
2
string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE '%' + @Search + '%')";

cmd.Parameters.AddWithValue("@Search",txtSearch.Text);

これはうまくいくはずです

于 2012-12-01T20:33:37.083 に答える
0

SqlDataAdapterを使用する代わりに、SqlDataReaderを使用できます

SqlDataReader myReader = cmd.ExecuteReader();

DataTable dt = new DataTable();
dt.Load(myReader);

コード内で、パラメーターが実際には使用されていないcmdにアタッチされているため、SqlDataAdapterがパラメーターを認識していないことがわかります。

于 2012-12-01T20:42:08.670 に答える