webentwicklung-frage-antwort-db.com.de

c # Verwenden von Parameters.AddWithValue in SqlDataAdapter

Wie kann ich Parameters.AddWithValue mit einem SqlDataAdapter verwenden? Unten Suchcodes.

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

Ich habe den Code so umgeschrieben:

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

aber es ist fehlgeschlagen.

21
user1372430

Die zum Initialisieren des SqlDataAdapter verwendete Zeichenfolge wird zur CommandText der SelectCommand -Eigenschaft des SqlDataAdapter.
Sie können diesem Befehl mit diesem Code Parameter hinzufügen

da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search",
                        _mssqlCon.connection);
da.SelectCommand.Parameters.AddWithValue("@search","%" + txtSearch.Text + "%");
  • Entfernen Sie zunächst das einfache Anführungszeichen um den Parameterplatzhalter.
  • Fügen Sie das Platzhalterzeichen direkt in den Value-Parameter von AddWithValue hinzu

Sie haben um die Verwendung von AddWithValue gebeten. Denken Sie jedoch daran, dass dies zwar eine nützliche Abkürzung ist, jedoch auch zahlreiche Nachteile vorhanden sind, die alle gut dokumentiert sind.

Daher könnte derselbe Code ohne AddWithValue und mit der Syntax Object and Collection Initializers als geschrieben werden 

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

Verwenden Sie da.SelectCommand.Parameters.Add() anstelle von cmd.Parameters.Add(). Hier ist ein Beispiel für den Umgang mit einer gespeicherten Prozedur, die zwei Parameter verwendet, und der zweite Parameter ist ein nullfähiger int-Parameter:

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

Ich benutze den Repeater für Showdaten 

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 [email protected]", 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

Versuche dies:

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