37 Stimmen

C# Verwendung von Parameters.AddWithValue in SqlDataAdapter

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

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 wie folgt 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.

87voto

Steve Punkte 208036

Der String, der zur Initialisierung des SqlDataAdapters verwendet wird, wird zum Wert für die CommandText-Eigenschaft innerhalb der SelectCommand-Eigenschaft des SqlDataAdapter.
Sie könnten Parameter zu diesem Befehl mit diesem Code hinzufügen

da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search",
                        _mssqlCon.connection);
da.SelectCommand.Parameters.AddWithValue("@search","%" + txtSearch.Text + "%");
  • Erstens, entfernen Sie die einfachen Anführungszeichen um den Parameterplatzhalter.
  • Zweitens, fügen Sie das Wildcard-Zeichen direkt zum Wertparameter von AddWithValue hinzu

Sie haben darum gebeten, AddWithValue zu verwenden, aber denken Sie daran, dass es zwar eine nützliche Abkürzung ist, aber auch zahlreiche Nachteile hat und alles gut dokumentiert ist.

Also, der gleiche Code ohne AddWithValue und unter Verwendung der Syntax der Objekt- und Kollektoren-Initialisierer könnte folgendermaßen 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  // Vorausgesetzt eine Größe von 2000 Zeichen für das Feld annotation (-1 für MAX)
});

und eine noch vereinfachte und einzeilige Version des Obigen ist:

da.SelectCommand.Parameters.Add("@search",SqlDbType.NVarChar,2000).Value = "%" + txtSearch.Text + "%";

4voto

Muhammad Musavi Punkte 2138

Verwenden Sie da.SelectCommand.Parameters.Add() anstelle von cmd.Parameters.Add(), hier ist ein Beispiel für den Umgang mit einem gespeicherten Verfahren, das zwei Parameter benötigt und der zweite ein Nullable-Int-Parameter ist:

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)
            //{
            //Sie können sogar Ihre Daten hier bearbeiten
            //}
            return dt;
        }
    }
}

0voto

mis2000lab Punkte 39

Versuchen Sie es mit:

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

0voto

dragonal Punkte 74

Ich verwende den Repeater, um Daten anzuzeigen

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X