web-dev-qa-db-fra.com

c # Utilisation de Parameters.AddWithValue dans SqlDataAdapter

Comment puis-je utiliser Parameters.AddWithValue avec un SqlDataAdapter. Ci-dessous les codes de recherche.

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

J'ai réécrit le code comme ceci:

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);

mais ça a échoué.

21
user1372430

La chaîne utilisée pour initialiser le SqlDataAdapter devient le CommandText de la propriété SelectCommand du SqlDataAdapter.
Vous pouvez ajouter des paramètres à cette commande avec ce code

da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search",
                        _mssqlCon.connection);
da.SelectCommand.Parameters.AddWithValue("@search","%" + txtSearch.Text + "%");
  • Tout d’abord, supprimez la citation simple autour de l’espace réservé au paramètre.
  • Deuxièmement, ajoutez le caractère générique directement dans le paramètre Value de AddWithValue

Vous avez demandé à utiliser AddWithValue, mais souvenez-vous que, s’il s’agit d’un raccourci utile, il présente également de nombreux inconvénients et tous sont bien documentés.

Ainsi, le même code sans AddWithValue et en utilisant la syntaxe initialiseurs d’objet et de collection pourrait être écrit comme suit: 

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)
});
58
Steve

Utilisez da.SelectCommand.Parameters.Add() au lieu de cmd.Parameters.Add(), voici un exemple pour traiter une procédure stockée qui prend deux paramètres et le second est un paramètre int nullable:

public DataTable GetData(int par1, int? par2)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    using (SqlDataAdapter da = new SqlDataAdapter())
                    {
                        string sql = "StoreProcedure_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;
                    }
                }

            }
2
Mohammad lm71

J'utilise Repeater pour afficher des données 

int queryString =int.Parse(Request.QueryString["Id"]);

SqlConnection conn =new SqlConnection("server=.; Database=Northwind; 
Integrated Security=true;");

try{
conn.Open();

SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT ProductID, ProductName, UnitPrice, CategoryID FROM Products WHERE CategoryID =@CategoryID", conn);

dataAdapter.SelectCommand.Parameters.Add("@CategoryID", queryString);
                        DataSet dataSet = new DataSet();
                        dataAdapter.Fill(dataSet);
                        QueryStringProductListRepeater.DataSource = dataSet;
                        QueryStringProductListRepeater.DataBind();
}

catch{
Response.Write("QueryStringProductListRepeater");
}

finally{
conn.Close();
}
0
dragonal

Essaye ça:

mySearchString = "Select * From test Where ([title] LIKE '%' + @title + '%')";
cmd.Parameters.Add("@title", SqlDbType.VarChar, 120);
cmd.Parameters("@title").Value = TextBox1.Text;
0
mis2000lab